using UnityEngine; using AX.MessageSystem; public class ObjHideOrShow : MonoBehaviour { private int mCurrentLayer;//用来记录切层到Hidden前的当前层。 private void Start() { mCurrentLayer = gameObject.layer; if (GameObject.Find("Main Camera").GetComponent().viewType == CameraViewState.PlanView ) { ObjHidden(null); } } void OnEnable() { MessageDispatcher.AddListener("OBJ_HIDDEN", ObjHidden); MessageDispatcher.AddListener("OBJ_SHOWED", ObjShowed); } void OnDisable() { MessageDispatcher.RemoveListener("OBJ_HIDDEN", ObjHidden); MessageDispatcher.RemoveListener("OBJ_SHOWED", ObjShowed); } void OnDestroy() { MessageDispatcher.RemoveListener("OBJ_HIDDEN", ObjHidden); MessageDispatcher.RemoveListener("OBJ_SHOWED", ObjShowed); } /// /// 隐藏显示物体 /// /// private void ObjHidden(IMessage obj) { if (gameObject.layer != LayerMask.NameToLayer("Hidden")) { int layer = LayerMask.NameToLayer("Hidden"); SetLayerRecursively(gameObject, layer); } } /// /// 显示隐藏物体 /// /// private void ObjShowed(IMessage obj) { if (gameObject.layer == LayerMask.NameToLayer("Hidden")) { SetLayerRecursively(gameObject, mCurrentLayer); } } /// /// 设置物体新的层 /// /// 设置蹭的物体 /// 目标层 private void SetLayerRecursively(GameObject obj, int newLayer) { obj.layer = newLayer; foreach (Transform child in obj.transform) { if (child.name == "Quad") { return; } else { SetLayerRecursively(child.gameObject, newLayer); } } } }