/// <summary> /// 创建层 /// </summary> /// <param name="layer"></param> /// <param name="goParent"></param> /// <param name="depthStart"></param> private void CreateNewLayer(UiLayer layer, GameObject goParent, int depthStart) { GameObject go = GameObjectUtility.CreateGameObject(); go.name = layer.ToString(); go.AddComponent <UIPanel>().depth = depthStart; GameObjectUtility.AddUiChild(goParent, go); go.layer = LayerMask.NameToLayer(layer.ToString()); layerGoDic[layer] = go; CreateLayerCamera(layer, LayerMask.NameToLayer(layer.ToString()), go); }
/// <summary> /// ui的显示事件, 通过BaseUi的显示方法调用过来的 /// </summary> /// <param name="ui"></param> public void OnShow(BaseUi ui) { if (!GetLayerCamera(ui.layer.ToString()).transform.parent.gameObject.activeSelf) { GetLayerCamera(ui.layer.ToString()).transform.parent.gameObject.SetActive(true); } ui.gameObject.SetActive(true); AddBackground(ui); AddClickEvent(ui); if (layerGoDic.ContainsKey(ui.layer)) { GameObjectUtility.AddUiChild(layerGoDic[ui.layer], ui.gameObject); } autoDepth.Add(autoDepth.GetUiPanel(ui), ui.layer); }
/// <summary> /// 创建每一层的摄像机 /// </summary> /// <param name="layer"></param> /// <param name="layerMask"></param> /// <param name="cameraParent"></param> private void CreateLayerCamera(UiLayer layer, int layerMask, GameObject cameraParent) { GameObject go = GameObjectUtility.CreateGameObject(); go.name = layer + "Camera"; Camera camera = go.AddComponent <Camera>(); UICamera uiCamera = go.AddComponent <UICamera>(); uiCamera.eventReceiverMask = (1 << layerMask); uiCamera.allowMultiTouch = false; camera.clearFlags = CameraClearFlags.Depth; camera.cullingMask = (1 << layerMask); camera.orthographic = true; camera.orthographicSize = 1f; camera.nearClipPlane = -10f; camera.farClipPlane = 10f; camera.depth = (int)layer; GameObjectUtility.AddUiChild(cameraParent, go); camera.transform.localPosition = new Vector3(0, 0, -10f); layerCameraDic.Add(layer.ToString(), camera); }