/// <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> /// 重新编译步骤内容,在更改步骤资源 ContentAsset 后,必须重新编译一次才可以开始步骤流程 /// </summary> /// <param name="disableStepIDs">禁用的步骤ID集合(当为null时启用所有步骤,禁用的步骤会自动跳过)</param> public void RecompileStepContent(HashSet <string> disableStepIDs = null) { if (ContentAsset) { #region 搜寻步骤目标 //搜寻场景中所有步骤目标 _targets.Clear(); List <GameObject> rootObjs = new List <GameObject>(); List <StepTarget> targetCaches = new List <StepTarget>(); GlobalTools.GetRootGameObjectsInAllScene(rootObjs); foreach (GameObject rootObj in rootObjs) { targetCaches.Clear(); rootObj.transform.GetComponentsInChildren(true, targetCaches); for (int i = 0; i < targetCaches.Count; i++) { if (!_targets.ContainsKey(targetCaches[i].GUID)) { _targets.Add(targetCaches[i].GUID, targetCaches[i]); } else { Log.Warning(string.Format("步骤控制者:发现相同GUID的目标!GUID:{0}\r\n目标物体:{1} 和 {2}", targetCaches[i].GUID, _targets[targetCaches[i].GUID].transform.FullName(), targetCaches[i].transform.FullName())); } } } #endregion #region 判断步骤ID是否重复 _stepContentIDs.Clear(); for (int i = 0; i < ContentAsset.Content.Count; i++) { StepContent content = ContentAsset.Content[i]; if (_stepContentIDs.ContainsKey(content.GUID)) { Log.Error(string.Format("步骤控制者:发现相同GUID的步骤!GUID:{0}\r\n步骤:{1} 和 {2}", content.GUID, _stepContentIDs[content.GUID].Name, content.Name)); } else { _stepContentIDs.Add(content.GUID, content); } } #endregion #region 生成所有步骤信息 _stepContents.Clear(); _stepContentEnables.Clear(); _stepContentIndexs.Clear(); //启用所有步骤 if (disableStepIDs == null || disableStepIDs.Count == 0) { for (int i = 0; i < ContentAsset.Content.Count; i++) { StepContent content = ContentAsset.Content[i]; if (_targets.ContainsKey(content.TargetGUID)) { content.Target = _targets[content.TargetGUID].gameObject; } else { Log.Error(string.Format("步骤控制者:【步骤:{0}】【{1}】目标没有找到,目标路径:{2}", i, content.Name, content.TargetPath)); } for (int j = 0; j < content.Operations.Count; j++) { StepOperation operation = content.Operations[j]; if (_targets.ContainsKey(operation.TargetGUID)) { operation.Target = _targets[operation.TargetGUID].gameObject; } else { Log.Error(string.Format("步骤控制者:【步骤:{0}】【操作:{1}】目标没有找到,目标路径:{2}", i, operation.Name, operation.TargetPath)); } } _stepContents.Add(content); if (!_stepContentEnables.ContainsKey(content.GUID)) { _stepContentEnables.Add(content.GUID, true); _stepContentIndexs.Add(content.GUID, _stepContents.Count - 1); } } } //禁用 disableStepIDs 指定的步骤 else { for (int i = 0; i < ContentAsset.Content.Count; i++) { StepContent content = ContentAsset.Content[i]; if (_targets.ContainsKey(content.TargetGUID)) { content.Target = _targets[content.TargetGUID].gameObject; } else { Log.Error(string.Format("步骤控制者:【步骤:{0}】【{1}】目标没有找到,目标路径:{2}", i, content.Name, content.TargetPath)); } for (int j = 0; j < content.Operations.Count; j++) { StepOperation operation = content.Operations[j]; if (_targets.ContainsKey(operation.TargetGUID)) { operation.Target = _targets[operation.TargetGUID].gameObject; } else { Log.Error(string.Format("步骤控制者:【步骤:{0}】【操作:{1}】目标没有找到,目标路径:{2}", i, operation.Name, operation.TargetPath)); } } _stepContents.Add(content); if (!_stepContentEnables.ContainsKey(content.GUID)) { _stepContentEnables.Add(content.GUID, !disableStepIDs.Contains(content.GUID)); _stepContentIndexs.Add(content.GUID, _stepContents.Count - 1); } } } _currentStepIndex = 0; _currentContent = null; _currentTarget = null; _currentHelper = null; _running = false; _pause = false; _executing = false; ClearCustomOrder(); #endregion } else { throw new HTFrameworkException(HTFrameworkModule.StepMaster, "步骤控制者:重新编译步骤失败,步骤控制者丢失了步骤资源 StepContentAsset!"); } }
/// <summary> /// 重新编译任务内容,在更改任务资源 ContentAsset 后,必须重新编译一次才可以开始任务流程 /// </summary> /// <param name="disableTaskIDs">禁用的任务点ID集合(当为null时启用所有任务,禁用的任务点不会触发)</param> public void RecompileTaskContent(HashSet <string> disableTaskIDs = null) { if (ContentAsset) { #region 搜寻任务目标 //搜寻场景中所有任务目标 _targets.Clear(); List <GameObject> rootObjs = new List <GameObject>(); List <TaskTarget> targetCaches = new List <TaskTarget>(); GlobalTools.GetRootGameObjectsInAllScene(rootObjs); foreach (GameObject rootObj in rootObjs) { targetCaches.Clear(); rootObj.transform.GetComponentsInChildren(true, targetCaches); for (int i = 0; i < targetCaches.Count; i++) { if (!_targets.ContainsKey(targetCaches[i].GUID)) { _targets.Add(targetCaches[i].GUID, targetCaches[i]); } else { Log.Warning(string.Format("任务控制者:发现相同GUID的目标!GUID:{0}\r\n目标物体:{1} 和 {2}", targetCaches[i].GUID, _targets[targetCaches[i].GUID].transform.FullName(), targetCaches[i].transform.FullName())); } } } #endregion #region 判断任务ID是否重复 _taskContentsList.Clear(); _taskContents.Clear(); _taskPoints.Clear(); for (int i = 0; i < ContentAsset.Content.Count; i++) { TaskContentBase content = ContentAsset.Content[i]; if (_taskContents.ContainsKey(content.GUID)) { Log.Error(string.Format("任务控制者:发现相同GUID的任务内容!GUID:{0}\r\n任务内容:{1} 和 {2}", content.GUID, _taskContents[content.GUID].Name, content.Name)); } else { _taskContents.Add(content.GUID, content); _taskContentsList.Add(content); } for (int j = 0; j < content.Points.Count; j++) { TaskPointBase point = content.Points[j]; if (_taskPoints.ContainsKey(point.GUID)) { Log.Error(string.Format("任务控制者:发现相同GUID的任务点!GUID:{0}\r\n任务点:{1} 和 {2}", point.GUID, _taskPoints[point.GUID].Name, point.Name)); } else { _taskPoints.Add(point.GUID, point); } if (_taskContents.ContainsKey(point.GUID)) { Log.Error(string.Format("任务控制者:发现相同GUID的任务内容和任务点!GUID:{0}\r\n任务内容:{1} 任务点:{2}", point.GUID, _taskContents[point.GUID].Name, point.Name)); } } } #endregion #region 刷新任务状态 foreach (var item in _taskContents) { item.Value.ReSet(); } foreach (var item in _taskPoints) { item.Value.ReSet(); } if (disableTaskIDs != null && disableTaskIDs.Count > 0) { foreach (var item in disableTaskIDs) { if (_taskPoints.ContainsKey(item)) { _taskPoints[item].IsEnableRunTime = false; } } } _currentTaskContentIndex = 0; _currentTaskContent = null; _running = false; Pause = false; #endregion } else { throw new HTFrameworkException(HTFrameworkModule.TaskMaster, "任务控制者:重新编译任务失败,任务控制者丢失了任务资源 TaskContentAsset!"); } }