unity物体被遮挡设置遮挡物半透明



如上图。我们通过射线。获取遮挡物。然后将遮挡物的shader替换。或者直接修改遮挡物的材质。实现半透效果。

具体代码如下

using UnityEngine;
using System.Collections;
using System.Collections.Generic;

public class MyCamera : MonoBehaviour
{
    ////本次碰撞到的物体
    private List<Renderer> colliderObject;

    //得到主人公
    public GameObject Target;
    void Start()
    {
        colliderObject = new List<Renderer>();

    }
    void Update()
    {
        //绘制射线为红色。方便调试
        Debug.DrawLine(Target.transform.position, transform.position, Color.red);
        RaycastHit[] hit;

        hit = Physics.RaycastAll(Target.transform.position, transform.position);
        if (hit.Length > 0)
        {

            for (int i = 0; i < hit.Length; i++)
            {
                //Debug.LogWarning("有碰撞" + hit[i].collider.gameObject.name);
                Renderer obj = hit[i].collider.gameObject.GetComponent<Renderer>();
                colliderObject.Add(obj);
                SetMaterialsColor(obj, 0.5f);
            }
            

        }//还原
        else
        {

            for (int i = 0; i < colliderObject.Count; i++)
            {
                Renderer obj = colliderObject[i];
                SetMaterialsColor(obj, 1f);
            }
        }

    }
    /// <summary>
    /// 修改遮挡物体所有材质
    /// </summary>
    /// <param name="_renderer">材质</param>
    /// <param name="Transpa">透明度</param>
    private void SetMaterialsColor(Renderer _renderer, float Transpa)
    {
        //换shader或者修改材质

        //获取当前物体材质球数量
        int materialsNumber = _renderer.sharedMaterials.Length;
        for (int i = 0; i < materialsNumber; i++)
        {
            
            //获取当前材质球颜色
            Color color = _renderer.materials[i].color;

            //设置透明度  0-1;  0 = 完全透明
            color.a = Transpa;

            //置当前材质球颜色
            _renderer.materials[i].SetColor("_Color", color);
        }

    }
}

另。默认的cube等需要自己设置一个材质。添加一个shader。如下


 

另。如果要获取一个范围而不是一条射线上的。可以用如下代码。

Physics.SphereCastAll(Target.transform.position,0.5f, transform.position);


效果如上。射线并没有直接射中物体。但是也被检测到了。

声明:小宝笔记|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - unity物体被遮挡设置遮挡物半透明


Carpe Diem and Do what I like