使用射线检测将挡住人物的模型透明化(未考虑性能问题)
原理:
从相机向人物发射一条射线,将碰到的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