unity将遮挡人物的模型透明化_笔记

使用射线检测将挡住人物的模型透明化(未考虑性能问题)

原理:

      从相机向人物发射一条射线,将碰到的tag为"障碍"的模型mesh材质全换为透明贴图,并将当前透明化的材质存储,每帧刷新时复原。

前置条件:

      1. 将需要透明化的模型tag设置为"障碍"

      2. 将"BuildSetFasle()"函数放在update中执行

 private Material m_TMm;//一个透明的贴图
    private Dictionary<string, Material> m_ZMDic = new Dictionary<string, Material>(50);
    private Dictionary<string, MeshRenderer> m_ZMeshDic = new Dictionary<string, MeshRenderer>(50);
 #region 建筑透明
    public void BuildSetFasle()
    {
        foreach (var item in m_ZMeshDic)
        {
            item.Value.material = m_ZMDic[item.Key];
        }
        m_CameraPos = new Vector3(_camera.transform.position.x, _camera.transform.position.y, _camera.transform.position.z - 5);
        RaycastHit[] hit = Physics.RaycastAll(m_CameraPos, m_Pos.position - m_CameraPos, 13);
        Debug.DrawRay(m_CameraPos, (m_Pos.position - m_CameraPos) * 10, Color.yellow);
        for (int i = 0; i < hit.Length; i++)
        {
            if (hit[i].transform.tag == "障碍")
            {
                MeshRenderer m = hit[i].transform.GetComponent<MeshRenderer>();
                if (m)
                {
                    if (!m_ZMDic.ContainsKey(m.gameObject.name))
                    {
                        m_ZMeshDic.Add(m.gameObject.name, m);
                        m_ZMDic.Add(m.gameObject.name, m.material);
                    }
                    m.material = m_TMm;
                }
            }
        }
    }
    #endregion

猜你喜欢

转载自blog.csdn.net/huojiweigb/article/details/125761271
今日推荐