/// <summary> /// 屏幕截图 /// </summary> private IEnumerator ScreenShot() { string path = ""; #if UNITY_ANDROID path = "/sdcard/DCIM/ScreenShots/"; #endif #if UNITY_STANDALONE_WIN || UNITY_EDITOR path = Application.dataPath + "/ScreenShots/"; #endif if (path != "") { Main.m_Debug.IsEnableDebugger = false; yield return(YieldInstructioner.GetWaitForEndOfFrame()); if (!Directory.Exists(path)) { Directory.CreateDirectory(path); } Texture2D texture = new Texture2D(Screen.width, Screen.height, TextureFormat.RGB24, false); texture.ReadPixels(new Rect(0, 0, Screen.width, Screen.height), 0, 0); texture.Apply(); string name = "ScreenShotImage_" + DateTime.Now.ToString("yyyyMMddhhmmss") + ".png"; byte[] bytes = texture.EncodeToPNG(); File.WriteAllBytes(path + name, bytes); Main.m_Debug.IsEnableDebugger = true; } else { Log.Warning("当前平台不支持截屏!"); yield return(0); } }
/// <summary> /// 等待协程 /// </summary> private IEnumerator WaitCoroutine(HTFAction action, float time) { yield return(YieldInstructioner.GetWaitForSeconds(time)); yield return(_pauseWait); action(); }
private IEnumerator EndOfFrame() { while (enabled) { yield return(YieldInstructioner.GetWaitForEndOfFrame()); _isOnce = false; } }
protected override IEnumerator OnComplete() { yield return(base.OnComplete()); if (!_duration.Approximately(0)) { yield return(YieldInstructioner.GetWaitForSeconds(_duration)); } }
/// <summary> /// 跳过当前步骤 /// </summary> private IEnumerator SkipCurrentStepCoroutine() { _executing = true; CurrentTask = StepHelperTask.Skip; //UGUI按钮点击型步骤,自动执行按钮事件 if (_currentContent.Trigger == StepTrigger.ButtonClick) { if (_currentButton) { _currentButton.onClick.Invoke(); _currentButton.onClick.RemoveListener(ButtonClickCallback); } else { _currentButton = _currentTarget.GetComponent <Button>(); if (_currentButton) { _currentButton.onClick.Invoke(); } else { Log.Error(string.Format("步骤控制器:【步骤:{0}】【{1}】的目标丢失Button组件!", _currentStepIndex + 1, _currentContent.Name)); } } _currentButton = null; } //创建步骤助手 if (_currentHelper == null) { _currentHelper = CreateHelper(_currentContent, StepHelperTask.Skip); } _currentContent.Skip(); SkipStepEvent?.Invoke(_currentContent, _stepContentEnables.ContainsKey(_currentContent.GUID) ? _stepContentEnables[_currentContent.GUID] : false); float elapseTime = _currentContent.Instant ? 0 : (_currentHelper != null ? _currentHelper.ElapseTime : _currentContent.ElapseTime); //助手执行跳过,等待生命周期结束后销毁助手 if (_currentHelper != null) { _currentHelper.Task = StepHelperTask.Skip; _currentHelper.OnSkip(); if (_currentHelper.SkipLifeTime > 0) { yield return(YieldInstructioner.GetWaitForSeconds(_currentHelper.SkipLifeTime)); } _currentHelper.OnTermination(); _currentHelper = null; } _waitCoroutine = Main.Current.StartCoroutine(WaitCoroutine(ChangeNextStep, elapseTime)); }
private IEnumerator EndOfFrame() { while (enabled) { yield return(YieldInstructioner.GetWaitForEndOfFrame()); // Reset one-frame highlighting state after each HighlightingEffect in the scene has finished rendering once = false; } }
/// <summary> /// 重新收集调试器游戏对象 /// </summary> private IEnumerator CollectDebuggerGameObjects() { yield return(YieldInstructioner.GetWaitForEndOfFrame()); Main.m_ReferencePool.Despawns(_gameObjects); GameObjectRoots.Clear(); _gameObjectCaches.Clear(); GlobalTools.GetRootGameObjectsInAllScene(_gameObjectCaches); for (int i = 0; i < _gameObjectCaches.Count; i++) { CollectDebuggerGameObject(_gameObjectCaches[i].transform, null); } CurrentGameObject = null; IsShowGameObjectFiltrate = false; }
/// <summary> /// 完成任务点协程 /// </summary> /// <param name="completeAction">完成后执行的操作</param> private IEnumerator CompleteCoroutine() { yield return(OnComplete()); if (GetTaskTarget != null) { GetTaskTarget.OnTaskPointComplete.Invoke(); if (!GetTaskTarget.CompletingTime.Approximately(0)) { yield return(YieldInstructioner.GetWaitForSeconds(GetTaskTarget.CompletingTime)); } } IsComplete = true; IsCompleting = false; OnEnd(); Main.m_Event.Throw(Main.m_ReferencePool.Spawn <EventTaskPointComplete>().Fill(this, IsEnable && IsEnableRunTime, false)); }
private static IEnumerator DelayExecute(HTFAction action, float delaySeconds) { yield return(YieldInstructioner.GetWaitForSeconds(delaySeconds)); action(); }
private IEnumerator SkipStepCoroutine(int index) { _executing = true; _skipIndex = index; while (_currentStep < _skipIndex) { _currentContent = _stepContents[_currentStep]; _currentTarget = _currentContent.Target.GetComponent <StepTarget>(); _currentContent.Skip(this); Main.m_Controller.TheControlMode = _currentContent.InitialMode; Main.m_Controller.SetLookPoint(_currentTarget.transform.position + _currentContent.ViewOffset, false); Main.m_Controller.SetLookAngle(_currentContent.BestView, true); SkipStepEvent?.Invoke(_currentContent, _stepContentEnables.ContainsKey(_currentContent.GUID) ? _stepContentEnables[_currentContent.GUID] : false); //UGUI按钮点击型步骤,自动执行按钮事件 if (_currentContent.Trigger == StepTrigger.ButtonClick) { if (_currentButton) { _currentButton.onClick.Invoke(); } else { _currentButton = _currentContent.Target.GetComponent <Button>(); if (_currentButton) { _currentButton.onClick.Invoke(); } else { GlobalTools.LogError(string.Format("【步骤:{0}】的目标丢失Button组件!", _currentStep + 1)); } } _currentButton = null; } //创建步骤助手 if (_currentHelper == null && _currentContent.Helper != "<None>") { Type type = GlobalTools.GetTypeInRunTimeAssemblies(_currentContent.Helper); if (type != null) { _currentHelper = Activator.CreateInstance(type) as StepHelper; _currentHelper.Target = _currentTarget; _currentHelper.Task = StepHelperTask.Skip; _currentHelper.OnInit(); } else { GlobalTools.LogError(string.Format("【步骤:{0}】的助手 {1} 丢失!", _currentStep + 1, _currentContent.Helper)); } } //助手执行跳过,等待生命周期结束后销毁助手 if (_currentHelper != null) { _currentHelper.Task = StepHelperTask.Skip; _currentHelper.OnSkip(); if (_currentHelper.SkipLifeTime > 0) { yield return(YieldInstructioner.GetWaitForSeconds(_currentHelper.SkipLifeTime / SkipMultiple)); } _currentHelper.OnTermination(); _currentHelper = null; } yield return(YieldInstructioner.GetWaitForSeconds(_currentContent.ElapseTime / SkipMultiple)); _currentStep += 1; } SkipStepDoneEvent?.Invoke(); BeginCurrentStep(); }
//跳过到指定步骤 private IEnumerator SkipStepCoroutine(int index) { _executing = true; _skipTargetIndex = index; while (_currentStepIndex < _skipTargetIndex) { _currentContent = _stepContents[_currentStepIndex]; _currentTarget = _currentContent.Target.GetComponent <StepTarget>(); _currentContent.Skip(); SkipStepEvent?.Invoke(_currentContent, _stepContentEnables.ContainsKey(_currentContent.GUID) ? _stepContentEnables[_currentContent.GUID] : false); //UGUI按钮点击型步骤,自动执行按钮事件 if (_currentContent.Trigger == StepTrigger.ButtonClick) { if (_currentButton) { _currentButton.onClick.Invoke(); _currentButton.onClick.RemoveListener(ButtonClickCallback); } else { _currentButton = _currentContent.Target.GetComponent <Button>(); if (_currentButton) { _currentButton.onClick.Invoke(); } else { Log.Error(string.Format("步骤控制器:【步骤:{0}】【{1}】的目标丢失Button组件!", _currentStepIndex + 1, _currentContent.Name)); } } _currentButton = null; } //创建步骤助手 if (_currentHelper == null && _currentContent.Helper != "<None>") { Type type = ReflectionToolkit.GetTypeInRunTimeAssemblies(_currentContent.Helper); if (type != null) { _currentHelper = Activator.CreateInstance(type) as StepHelper; _currentHelper.Parameters = _currentContent.Parameters; for (int i = 0; i < _currentHelper.Parameters.Count; i++) { if (_currentHelper.Parameters[i].Type == StepParameter.ParameterType.GameObject) { if (_targets.ContainsKey(_currentHelper.Parameters[i].GameObjectGUID)) { _currentHelper.Parameters[i].GameObjectValue = _targets[_currentHelper.Parameters[i].GameObjectGUID].gameObject; } } } _currentHelper.Content = _currentContent; _currentHelper.Target = _currentTarget; _currentHelper.Task = StepHelperTask.Skip; _currentHelper.OnInit(); } else { Log.Error(string.Format("步骤控制器:【步骤:{0}】【{1}】的助手 {2} 丢失!", _currentStepIndex + 1, _currentContent.Name, _currentContent.Helper)); } } //助手执行跳过,等待生命周期结束后销毁助手 if (_currentHelper != null) { _currentHelper.Task = StepHelperTask.Skip; _currentHelper.OnSkip(); if (_currentHelper.SkipLifeTime > 0) { yield return(YieldInstructioner.GetWaitForSeconds(_currentHelper.SkipLifeTime / SkipMultiple)); } _currentHelper.OnTermination(); _currentHelper = null; } yield return(YieldInstructioner.GetWaitForSeconds(_currentContent.ElapseTime / SkipMultiple)); _currentStepIndex += 1; } SkipStepDoneEvent?.Invoke(); _waitCoroutine = Main.Current.StartCoroutine(WaitCoroutine(BeginCurrentStep, 0)); }
private IEnumerator SkipCurrentStepCoroutine() { _executing = true; _currentContent.Skip(this); SkipStepEvent?.Invoke(_currentContent, _stepContentEnables.ContainsKey(_currentContent.GUID) ? _stepContentEnables[_currentContent.GUID] : false); //UGUI按钮点击型步骤,自动执行按钮事件 if (_currentContent.Trigger == StepTrigger.ButtonClick) { if (_currentButton) { _currentButton.onClick.Invoke(); } else { _currentButton = _currentContent.Target.GetComponent <Button>(); if (_currentButton) { _currentButton.onClick.Invoke(); } else { GlobalTools.LogError(string.Format("【步骤:{0}】的目标丢失Button组件!", _currentStep + 1)); } } _currentButton = null; } //创建步骤助手 if (_currentHelper == null && _currentContent.Helper != "<None>") { Type type = GlobalTools.GetTypeInRunTimeAssemblies(_currentContent.Helper); if (type != null) { _currentHelper = Activator.CreateInstance(type) as StepHelper; _currentHelper.Parameters = _currentContent.Parameters; for (int i = 0; i < _currentHelper.Parameters.Count; i++) { if (_currentHelper.Parameters[i].Type == StepParameter.ParameterType.GameObject) { if (_targets.ContainsKey(_currentHelper.Parameters[i].GameObjectGUID)) { _currentHelper.Parameters[i].GameObjectValue = _targets[_currentHelper.Parameters[i].GameObjectGUID].gameObject; } } } _currentHelper.Content = _currentContent; _currentHelper.Target = _currentTarget; _currentHelper.Task = StepHelperTask.Skip; _currentHelper.OnInit(); } else { GlobalTools.LogError(string.Format("【步骤:{0}】的助手 {1} 丢失!", _currentStep + 1, _currentContent.Helper)); } } //助手执行跳过,等待生命周期结束后销毁助手 if (_currentHelper != null) { _currentHelper.Task = StepHelperTask.Skip; _currentHelper.OnSkip(); if (_currentHelper.SkipLifeTime > 0) { yield return(YieldInstructioner.GetWaitForSeconds(_currentHelper.SkipLifeTime / SkipMultiple)); } _currentHelper.OnTermination(); _currentHelper = null; } yield return(YieldInstructioner.GetWaitForSeconds(_currentContent.ElapseTime / SkipMultiple)); yield return(WaitCoroutine(ChangeNextStep, 0)); }
/// <summary> /// 跳过到指定步骤 /// </summary> /// <param name="index">步骤索引</param> private IEnumerator SkipStepCoroutine(int index) { _executing = true; _skipTargetIndex = index; CurrentTask = StepHelperTask.Skip; while (_currentStepIndex < _skipTargetIndex) { _currentContent = _stepContents[_currentStepIndex]; _currentTarget = _currentContent.Target.GetComponent <StepTarget>(); //UGUI按钮点击型步骤,自动执行按钮事件 if (_currentContent.Trigger == StepTrigger.ButtonClick) { if (_currentButton) { _currentButton.onClick.Invoke(); _currentButton.onClick.RemoveListener(ButtonClickCallback); } else { _currentButton = _currentContent.Target.GetComponent <Button>(); if (_currentButton) { _currentButton.onClick.Invoke(); } else { Log.Error(string.Format("步骤控制器:【步骤:{0}】【{1}】的目标丢失Button组件!", _currentStepIndex + 1, _currentContent.Name)); } } _currentButton = null; } //创建步骤助手 if (_currentHelper == null) { _currentHelper = CreateHelper(_currentContent, StepHelperTask.Skip); } _currentContent.Skip(); SkipStepEvent?.Invoke(_currentContent, _currentContent.IsEnable && _currentContent.IsEnableRunTime); float elapseTime = _currentContent.Instant ? 0 : (_currentHelper != null ? _currentHelper.ElapseTime : _currentContent.ElapseTime); //助手执行跳过,等待生命周期结束后销毁助手 if (_currentHelper != null) { _currentHelper.Task = StepHelperTask.Skip; _currentHelper.OnSkip(); if (_currentHelper.SkipLifeTime > 0) { yield return(YieldInstructioner.GetWaitForSeconds(_currentHelper.SkipLifeTime)); } _currentHelper.OnTermination(); _currentHelper = null; } yield return(YieldInstructioner.GetWaitForSeconds(elapseTime)); _currentStepIndex += 1; } SkipStepDoneEvent?.Invoke(); _waitCoroutine = Main.Current.StartCoroutine(WaitCoroutine(BeginCurrentStep, 0)); }