public static FinishObjectUtil getInstance() { if (_instance == null) { _instance = new FinishObjectUtil(); } return(_instance); }
/// <summary> /// 调度转场,需设置是否延迟启动 /// </summary> /// <param name='isIn'> /// 转入还是转出 /// </param> /// <param name='_cb'> /// 转场完成的回调 /// </param> public void transit(bool isIn, Action cb) { if (reverse) { isIn = !isIn; } isTransIn = isIn; inTrans = true; _inTransSelf = true; if (foc != null) { foc.Terminate(); } // 设置完成回调 foc = FinishObjectUtil.getInstance().createFinishObjectController(); foc.AddObject(this); foc.cbFinish += dealTransitOver; foc.cbFinish += cb; // 驱动子转场 int count = 0; // 如果有子内容需要转场 if (needTransitChild) { TransitObject[] list = GetComponentsInChildren <TransitObject>(true); //Debug.Log("Find " + list.Length + " child"); for (int i = 0; i < list.Length; i++) { TransitObject tobj = list[i]; if (tobj != null && tobj != this && tobj.transitGroup == this.transitGroup) { if (!tobj.needShowWhenTransitIn && !tobj.gameObject.activeSelf) { continue; } /* * if (tobj.isBusy()) * { * Debug.Log("[" + tobj + "] busy!"); * continue; * } */ tobj.transit(isIn, null); foc.AddObject(tobj); count++; } } //Debug.Log("Transit " + count + " sub object"); } foc.Start(); switch (delayType) { case TransitDelayType.WaitForTime: // 等待时间 if (timerKey > 0) { TimerManager.Instance.RemoveTimer(timerKey); } isWaitingContinue = true; timerKey = TimerManager.Instance.RegisterTimer(DelayByTime, delayTime, 1); //Debug.Log("Regist timer " + timerKey); break; case TransitDelayType.WaitForCall: // 等待调用 isWaitingContinue = true; break; default: // 无延迟 DealShow(); transitContent(isIn); break; } }