From 32558e1684e04d9c8c97415734beeec9a0289d54 Mon Sep 17 00:00:00 2001 From: yzx Date: Tue, 18 Jun 2024 16:05:50 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Assets/JunctionBox.cs | 8 +- .../Model/电线杆/Mat/绝缘胶带绑线p1.mat | 12 +- .../Assets/Model/设备/Mat/JZQRuning.mat | 2 +- .../Assets/Scenes/工具间Scenes/工具间.unity | 3 +- .../Assets/Scenes/现场 _Test.unity | 1 + .../Assets/Screwdriver.cs | 13 +- .../CharacterMirrorManager.cs | 2 +- .../Assets/Scripts/ConsumePowerManager.cs | 6 +- .../Assets/Scripts/DataConfigManager.cs | 8 +- .../ProcessMode/ActionWithDescription.cs | 10 +- .../Scripts/ProcessMode/AnimationProcess.cs | 6 +- .../ProcessMode/AnimationProcessManager.cs | 228 +++++++++--------- .../Assets/Scripts/ProcessMode/ProcessMode.cs | 20 +- .../ProcessMode/SceneProcessLauncher.cs | 61 ++--- .../ToolsPack/ToolsPackGameObjectComponent.cs | 2 +- .../ToolsPack/ToolsSceneProcessLauncher.cs | 164 ++++++------- .../Assets/Scripts/test1.cs | 2 +- .../Assets/Seal.cs | 4 +- .../DataConfig/SceneStepData.json | 14 -- .../Assets/StreamingAssets/info.ini | 2 +- .../Assets/concentrator.cs | 4 +- .../Assets/taoruiqi/AdhesiveTape.cs | 2 +- .../Assets/taoruiqi/Pliers.cs | 10 +- .../taoruiqi/Script/ElectricCheckPen.cs | 4 +- .../taoruiqi/Script/Field observation.cs | 10 +- .../Assets/taoruiqi/WorkPermit.cs | 2 +- .../SXElectricityInformationAcquisition.sln | 109 ++++----- 27 files changed, 336 insertions(+), 373 deletions(-) diff --git a/SXElectricityInformationAcquisition/Assets/JunctionBox.cs b/SXElectricityInformationAcquisition/Assets/JunctionBox.cs index a8a6fbb1..cdde7ec6 100644 --- a/SXElectricityInformationAcquisition/Assets/JunctionBox.cs +++ b/SXElectricityInformationAcquisition/Assets/JunctionBox.cs @@ -48,19 +48,19 @@ public class JunctionBox : MonoBehaviour { case "ߺ򻬿001": hit.collider.gameObject.transform.DOLocalMove(new Vector3(0.06131744f, -0.0075f, 0.0089f), 1f); - Debug.Log(hit.collider.gameObject.name); MotionEngine.GetModule().HandleClick(hit.collider.gameObject); + Debug.Log(hit.collider.gameObject.name); MotionEngine.GetModule().HandleClick(hit.collider.gameObject.name); break; case "ߺ򻬿002": hit.collider.gameObject.transform.DOLocalMove(new Vector3(0.02013969f, -0.0075f, 0.0089f), 1f); - Debug.Log(hit.collider.gameObject.name); MotionEngine.GetModule().HandleClick(hit.collider.gameObject); + Debug.Log(hit.collider.gameObject.name); MotionEngine.GetModule().HandleClick(hit.collider.gameObject.name); break; case "ߺ򻬿003": hit.collider.gameObject.transform.DOLocalMove(new Vector3(-0.02001452f, -0.0075f, 0.0089f), 1f); - Debug.Log(hit.collider.gameObject.name); MotionEngine.GetModule().HandleClick(hit.collider.gameObject); + Debug.Log(hit.collider.gameObject.name); MotionEngine.GetModule().HandleClick(hit.collider.gameObject.name); break; case "ߺ򻬿004": hit.collider.gameObject.transform.DOLocalMove(new Vector3(-0.06075525f, -0.0075f, 0.0089f), 1f); - Debug.Log(hit.collider.gameObject.name); MotionEngine.GetModule().HandleClick(hit.collider.gameObject); + Debug.Log(hit.collider.gameObject.name); MotionEngine.GetModule().HandleClick(hit.collider.gameObject.name); break; } } diff --git a/SXElectricityInformationAcquisition/Assets/Model/电线杆/Mat/绝缘胶带绑线p1.mat b/SXElectricityInformationAcquisition/Assets/Model/电线杆/Mat/绝缘胶带绑线p1.mat index 50c8efb9..2fa1692f 100644 --- a/SXElectricityInformationAcquisition/Assets/Model/电线杆/Mat/绝缘胶带绑线p1.mat +++ b/SXElectricityInformationAcquisition/Assets/Model/电线杆/Mat/绝缘胶带绑线p1.mat @@ -114,12 +114,12 @@ Material: - _UVSec: 0 - _ZWrite: 1 - __dirty: 0 - - _step_p1: 0 - - _step_p2: 0 - - _step_p3: 0 - - _step_p4: 0 - - _step_p5: 0 - - _step_p6: 0 + - _step_p1: 1 + - _step_p2: 1 + - _step_p3: 1 + - _step_p4: 1 + - _step_p5: 1 + - _step_p6: 1 m_Colors: - _BaseCol: {r: 0.23429155, g: 0.28497556, b: 0.3679245, a: 0} - _Color: {r: 1, g: 1, b: 1, a: 1} diff --git a/SXElectricityInformationAcquisition/Assets/Model/设备/Mat/JZQRuning.mat b/SXElectricityInformationAcquisition/Assets/Model/设备/Mat/JZQRuning.mat index e1204148..76b2cdbd 100644 --- a/SXElectricityInformationAcquisition/Assets/Model/设备/Mat/JZQRuning.mat +++ b/SXElectricityInformationAcquisition/Assets/Model/设备/Mat/JZQRuning.mat @@ -25,7 +25,7 @@ Material: m_TexEnvs: [] m_Ints: [] m_Floats: - - _LightSpeed: 2 + - _LightSpeed: 3 - _LightSwitch: 0 - __dirty: 1 m_Colors: diff --git a/SXElectricityInformationAcquisition/Assets/Scenes/工具间Scenes/工具间.unity b/SXElectricityInformationAcquisition/Assets/Scenes/工具间Scenes/工具间.unity index 7174c9b8..986ac545 100644 --- a/SXElectricityInformationAcquisition/Assets/Scenes/工具间Scenes/工具间.unity +++ b/SXElectricityInformationAcquisition/Assets/Scenes/工具间Scenes/工具间.unity @@ -7581,9 +7581,10 @@ MonoBehaviour: m_GameObject: {fileID: 505215068} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 0234ae9c682a4828aa916e415ad8b21d, type: 3} + m_Script: {fileID: 11500000, guid: 51f73ee94f284a86b677a6bc74544094, type: 3} m_Name: m_EditorClassIdentifier: + _toolsPackScene: 0 --- !u!1 &514951653 GameObject: m_ObjectHideFlags: 0 diff --git a/SXElectricityInformationAcquisition/Assets/Scenes/现场 _Test.unity b/SXElectricityInformationAcquisition/Assets/Scenes/现场 _Test.unity index 3fa5d778..dc75812b 100644 --- a/SXElectricityInformationAcquisition/Assets/Scenes/现场 _Test.unity +++ b/SXElectricityInformationAcquisition/Assets/Scenes/现场 _Test.unity @@ -32525,6 +32525,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 51f73ee94f284a86b677a6bc74544094, type: 3} m_Name: m_EditorClassIdentifier: + _toolsPackScene: 1 --- !u!4 &1516723168 Transform: m_ObjectHideFlags: 0 diff --git a/SXElectricityInformationAcquisition/Assets/Screwdriver.cs b/SXElectricityInformationAcquisition/Assets/Screwdriver.cs index 1af2af98..37d6f8e7 100644 --- a/SXElectricityInformationAcquisition/Assets/Screwdriver.cs +++ b/SXElectricityInformationAcquisition/Assets/Screwdriver.cs @@ -122,22 +122,22 @@ public class Screwdriver : MonoBehaviour if (hit.collider.gameObject.name == "_̶˿_Rup") { StartCoroutine(Rscrew()); - Debug.Log(hit.collider.gameObject.name); MotionEngine.GetModule().HandleClick(hit.collider.gameObject); + Debug.Log(hit.collider.gameObject.name); MotionEngine.GetModule().HandleClick(hit.collider.gameObject.name); } if (hit.collider.gameObject.name == "̶˿_Ldown") { StartCoroutine(Lscrew()); - Debug.Log(hit.collider.gameObject.name); MotionEngine.GetModule().HandleClick(hit.collider.gameObject); + Debug.Log(hit.collider.gameObject.name); MotionEngine.GetModule().HandleClick(hit.collider.gameObject.name); } if (hit.collider.gameObject.name == "ǹ̶˿_R") { Debug.Log(hit.collider.gameObject.name); - StartCoroutine(IERconcentratorScrew()); MotionEngine.GetModule().HandleClick(hit.collider.gameObject); + StartCoroutine(IERconcentratorScrew()); MotionEngine.GetModule().HandleClick(hit.collider.gameObject.name); } if (hit.collider.gameObject.name == "ǹ̶˿_L") { Debug.Log(hit.collider.gameObject.name); - StartCoroutine(IELconcentratorScrew()); MotionEngine.GetModule().HandleClick(hit.collider.gameObject); + StartCoroutine(IELconcentratorScrew()); MotionEngine.GetModule().HandleClick(hit.collider.gameObject.name); } for (int i = 0; i < ScrewObj.Length; i++) { @@ -146,17 +146,18 @@ public class Screwdriver : MonoBehaviour Debug.Log(hit.collider.gameObject.name); ScrewObj[i].gameObject.SetActive(false); ScrewdriverTrans.gameObject.transform.localPosition = new Vector3(3.1215f, 2.1383f, -1.3484f); + MotionEngine.GetModule().HandleClick(hit.collider.gameObject.name); } } if (hit.collider.gameObject.name == "̶˿_Rdown") { Debug.Log(hit.collider.gameObject.name); - StartCoroutine(right()); MotionEngine.GetModule().HandleClick(hit.collider.gameObject); + StartCoroutine(right()); MotionEngine.GetModule().HandleClick(hit.collider.gameObject.name); } if (hit.collider.gameObject.name == "̶˿_Ldown") { Debug.Log(hit.collider.gameObject.name); - StartCoroutine(left()); MotionEngine.GetModule().HandleClick(hit.collider.gameObject); + StartCoroutine(left()); MotionEngine.GetModule().HandleClick(hit.collider.gameObject.name); } } diff --git a/SXElectricityInformationAcquisition/Assets/Scripts/CharacterEquipWindow/CharacterMirrorManager.cs b/SXElectricityInformationAcquisition/Assets/Scripts/CharacterEquipWindow/CharacterMirrorManager.cs index d9b743e4..c58b36c4 100644 --- a/SXElectricityInformationAcquisition/Assets/Scripts/CharacterEquipWindow/CharacterMirrorManager.cs +++ b/SXElectricityInformationAcquisition/Assets/Scripts/CharacterEquipWindow/CharacterMirrorManager.cs @@ -35,7 +35,7 @@ public class CharacterMirrorManager : MonoBehaviour { if(EventSystem.current.IsPointerOverGameObject()) return; - MotionEngine.GetModule().HandleClick(this.gameObject); + MotionEngine.GetModule().HandleClick(this.gameObject.name); StartCoroutine(FadeIn(uiImage, 0.5f)); } diff --git a/SXElectricityInformationAcquisition/Assets/Scripts/ConsumePowerManager.cs b/SXElectricityInformationAcquisition/Assets/Scripts/ConsumePowerManager.cs index ef5520a2..e0375f18 100644 --- a/SXElectricityInformationAcquisition/Assets/Scripts/ConsumePowerManager.cs +++ b/SXElectricityInformationAcquisition/Assets/Scripts/ConsumePowerManager.cs @@ -23,9 +23,9 @@ public class ConsumePowerManager : MonoBehaviour confirmBt.onClick.AddListener(delegate { - MotionEngine.GetModule().HandleClick(GameObject.Find("临时用电")); - MotionEngine.GetModule().HandleClick(GameObject.Find("现场调试")); - + MotionEngine.GetModule().HandleClick("临时用电"); + MotionEngine.GetModule().HandleClick("现场调试"); + OnOpenLight(); }); } diff --git a/SXElectricityInformationAcquisition/Assets/Scripts/DataConfigManager.cs b/SXElectricityInformationAcquisition/Assets/Scripts/DataConfigManager.cs index 7f8ecca9..e9eb6c98 100644 --- a/SXElectricityInformationAcquisition/Assets/Scripts/DataConfigManager.cs +++ b/SXElectricityInformationAcquisition/Assets/Scripts/DataConfigManager.cs @@ -40,19 +40,19 @@ namespace DefaultNamespace public void SetProcessMode(int index) { - if (index == 0) + if (index == 0)// 教学模式 { _processMode = DefaultNamespace.ProcessMode.ProcessMode.Teaching; } - else if (index == 1) + else if (index == 1)// 培训模式 { _processMode = DefaultNamespace.ProcessMode.ProcessMode.Training; } - else if (index == 2) + else if (index == 2)// 练习模式 { _processMode = DefaultNamespace.ProcessMode.ProcessMode.Practice; } - else if (index == 3) + else if (index == 3)// 考核模式 { _processMode = DefaultNamespace.ProcessMode.ProcessMode.Assessment; } diff --git a/SXElectricityInformationAcquisition/Assets/Scripts/ProcessMode/ActionWithDescription.cs b/SXElectricityInformationAcquisition/Assets/Scripts/ProcessMode/ActionWithDescription.cs index 5fffd763..37bf540c 100644 --- a/SXElectricityInformationAcquisition/Assets/Scripts/ProcessMode/ActionWithDescription.cs +++ b/SXElectricityInformationAcquisition/Assets/Scripts/ProcessMode/ActionWithDescription.cs @@ -6,23 +6,23 @@ namespace DefaultNamespace.ProcessMode { public class ActionWithDescription { - public List TargetObjects { get; set; } + public List TargetObjects { get; set; } public Action Action { get; set; } public string Description { get; set; } public bool IsSequential { get; set; } // 是否按顺序点击 - public HashSet ClickedObjects { get; private set; } // 已点击的对象集合 + public HashSet ClickedObjects { get; private set; } // 已点击的对象集合 public int CurrentObjectIndex { get; set; } // 当前对象的点击索引,仅用于按顺序点击的情况 public bool FeedbackDisplayed { get; set; } // 是否已经显示过反馈 public string StepDescription { get; set; } - public ActionWithDescription(List targetObjects, Action action, string description, bool isSequential,string stepDescription) + public ActionWithDescription(List targetObjects, Action action, string description, bool isSequential, string stepDescription) { - TargetObjects = targetObjects ?? new List(); + TargetObjects = targetObjects ?? new List(); Action = action; Description = description; IsSequential = isSequential; - ClickedObjects = new HashSet(); // 初始化已点击的对象集合 + ClickedObjects = new HashSet(); // 初始化已点击的对象集合 CurrentObjectIndex = 0; // 初始化为第一个对象 FeedbackDisplayed = false; // 初始化反馈未显示 diff --git a/SXElectricityInformationAcquisition/Assets/Scripts/ProcessMode/AnimationProcess.cs b/SXElectricityInformationAcquisition/Assets/Scripts/ProcessMode/AnimationProcess.cs index e1b80828..91d83d1f 100644 --- a/SXElectricityInformationAcquisition/Assets/Scripts/ProcessMode/AnimationProcess.cs +++ b/SXElectricityInformationAcquisition/Assets/Scripts/ProcessMode/AnimationProcess.cs @@ -6,7 +6,7 @@ namespace DefaultNamespace.ProcessMode { public string Type { get; set; } // 流程类型(例如:教学、培训、练习) public List Steps { get; private set; } // 流程中的步骤列表 - + /// /// 构造函数 /// @@ -16,7 +16,7 @@ namespace DefaultNamespace.ProcessMode Type = type; Steps = new List(); } - + /// /// 添加步骤到流程中 /// @@ -25,7 +25,7 @@ namespace DefaultNamespace.ProcessMode { Steps.Add(step); } - + /// /// 计算流程的总评分 /// diff --git a/SXElectricityInformationAcquisition/Assets/Scripts/ProcessMode/AnimationProcessManager.cs b/SXElectricityInformationAcquisition/Assets/Scripts/ProcessMode/AnimationProcessManager.cs index 19836a1f..bd318660 100644 --- a/SXElectricityInformationAcquisition/Assets/Scripts/ProcessMode/AnimationProcessManager.cs +++ b/SXElectricityInformationAcquisition/Assets/Scripts/ProcessMode/AnimationProcessManager.cs @@ -25,12 +25,14 @@ namespace DefaultNamespace.ProcessMode public delegate void UIEventHandler(); public delegate void SendMessagePrompt(string message); - - // 定义一个事件,使用委托类型 + + /// + /// 全部流程结束调用方法 + /// public event CompleteEventHandler OnCompleteEvent; public event UIEventHandler OnUIEvent; public event SendMessagePrompt OnSendMessagePrompt; - + public void AddProcess(string type) { @@ -39,7 +41,7 @@ namespace DefaultNamespace.ProcessMode // processes[type] = new AnimationProcess(type); // Enum.TryParse(type, true, out currentMode); // } - + processes[type] = new AnimationProcess(type); Enum.TryParse(type, true, out currentMode); } @@ -58,7 +60,7 @@ namespace DefaultNamespace.ProcessMode } } - public void HandleClick(GameObject clickedObject) + public void HandleClick(string clickedObject) { string type = currentMode.ToString(); @@ -77,10 +79,10 @@ namespace DefaultNamespace.ProcessMode if (currentAction.CurrentObjectIndex < currentAction.TargetObjects.Count && currentAction.TargetObjects[currentAction.CurrentObjectIndex] == clickedObject) { - Debug.Log($"正确点击了:{clickedObject.name}"); + Debug.Log($"正确点击了:{clickedObject}"); currentAction.CurrentObjectIndex++; // 正确点击,递增对象索引 currentAction.ClickedObjects.Add(clickedObject); // 添加到已点击对象集合 - HandleModeSpecificFeedback(currentMode, currentAction); // 处理模式特定的反馈 + HandleModeFeedback(currentMode, currentAction); // 处理模式特定的反馈 if (currentAction.CurrentObjectIndex >= currentAction.TargetObjects.Count) { @@ -89,26 +91,26 @@ namespace DefaultNamespace.ProcessMode } else { - string correctObjectName = currentAction.TargetObjects[currentAction.CurrentObjectIndex].name; - Debug.Log($"错误点击或顺序错误:{clickedObject.name}。正确的物体是:{correctObjectName}"); + string correctObjectName = currentAction.TargetObjects[currentAction.CurrentObjectIndex]; + Debug.Log($"错误点击或顺序错误:{clickedObject}。正确的物体是:{correctObjectName}"); } } else { // 不按顺序点击的逻辑 - if (currentAction.TargetObjects.Any(obj => obj.name == clickedObject.name)) + if (currentAction.TargetObjects.Any(obj => obj == clickedObject)) { - if (currentAction.ClickedObjects.Any(obj => obj.name == clickedObject.name)) + if (currentAction.ClickedObjects.Any(obj => obj == clickedObject)) { - Debug.Log($"错误点击:{clickedObject.name}。这个物体已经点击过。"); + Debug.Log($"错误点击:{clickedObject}。这个物体已经点击过。"); return; // 如果物体已经点击过,不继续处理 } if (!currentAction.ClickedObjects.Contains(clickedObject)) { - Debug.Log($"正确点击了:{clickedObject.name}"); + Debug.Log($"正确点击了:{clickedObject}"); currentAction.ClickedObjects.Add(clickedObject); // 添加到已点击对象集合 - HandleModeSpecificFeedback(currentMode, currentAction); // 处理模式特定的反馈 + HandleModeFeedback(currentMode, currentAction); // 处理模式特定的反馈 if (currentAction.ClickedObjects.Count >= currentAction.TargetObjects.Count) { @@ -118,17 +120,17 @@ namespace DefaultNamespace.ProcessMode } else { - Debug.Log($"错误点击:{clickedObject.name}"); + Debug.Log($"错误点击:{clickedObject}"); List correctObjectNames = new List(); foreach (var obj in currentAction.TargetObjects) { if (!currentAction.ClickedObjects.Contains(obj)) { - correctObjectNames.Add(obj.name); + correctObjectNames.Add(obj); } } - string correctObjects = string.Join(", ", correctObjectNames); + string correctObjects = string.Join(",", correctObjectNames); Debug.Log($"正确的物体是:{correctObjects}"); } } @@ -145,7 +147,6 @@ namespace DefaultNamespace.ProcessMode { Debug.Log($"完成了动作 {currentActionIndex + 1}"); step.PlayAnimation(currentActionIndex); // 播放当前动作的动画 - DisplayActionFeedback(currentMode, currentAction); // 显示模式特定的反馈 currentActionIndex++; currentAction.CurrentObjectIndex = 0; // 重置当前动作对象索引 @@ -159,20 +160,14 @@ namespace DefaultNamespace.ProcessMode currentStepIndex++; if (currentStepIndex < processes[currentMode.ToString()].Steps.Count) { - var nextStep = processes[currentMode.ToString()].Steps[currentStepIndex]; - PrepareNextStep(currentMode, nextStep.Actions[0]); // 准备下一个步骤 - - // if (nextStep.Actions[0].StepDescription == "临时用电") - // { - // Debug.Log("临时用电临时用电临时用电临时用电临时用电临时用电临时用电临时用电临时用电临时用电"); - // OnUIEvent(); - // } + var nextStep = processes[currentMode.ToString()].Steps[currentStepIndex]; + HandleModeFeedback(currentMode, nextStep.Actions[0]); // 准备下一个步骤 } else { if (MotionEngine.GetModule().GetToolsPackScene() == ToolsPackScene.其他) { - OnCompleteEvent(); + OnCompleteEvent?.Invoke(); } Debug.Log("全部完成了!!!!"); @@ -181,73 +176,76 @@ namespace DefaultNamespace.ProcessMode else { Debug.Log("开始下一个动作!"); - PrepareNextStep(currentMode, step.Actions[currentActionIndex]); // 传递下一个动作对象 - - // if (step.Actions[currentActionIndex].StepDescription == "临时用电") - // { - // Debug.Log("临时用电临时用电临时用电临时用电临时用电临时用电临时用电临时用电临时用电临时用电"); - // OnUIEvent(); - // } + HandleModeFeedback(currentMode, step.Actions[currentActionIndex]); // 传递下一个动作对象 } } - // Start is called before the first frame update - + + /// - /// 根据当前模式显示相应的动作反馈 + /// 判断是否为最后一个动作 /// - /// 当前的流程模式 /// 当前的动作 - private void DisplayActionFeedback(ProcessMode mode, ActionWithDescription action) + /// 是否为最后一个动作 + private bool IsLastAction(ActionWithDescription action) { - switch (mode) + if (currentStepIndex == processes[currentMode.ToString()].Steps.Count - 1 && + currentActionIndex == processes[currentMode.ToString()].Steps[currentStepIndex].Actions.Count - 1) { - case ProcessMode.Teaching: - HighlightNextObject(action); // 高亮下一个需要点击的物体 - break; - case ProcessMode.Training: - //ShowTrainingStep(action); // 在右上角显示流程步骤 - break; - case ProcessMode.Practice: - ShowPracticeStep(action); // 只显示当前步骤 - break; - case ProcessMode.Assessment: - // 考核模式无提示 - break; + return true; } + return false; } /// - /// 准备下一个步骤或动作,并根据模式处理相应的提示或反馈 + /// 根据当前模式处理相应的反馈逻辑,包括准备下一个步骤或动作 /// /// 当前的流程模式 - /// 下一个步骤或动作 - public void PrepareNextStep(ProcessMode mode, object nextStepOrAction) + /// 当前步骤或动作 + public void HandleModeFeedback(ProcessMode mode, object stepOrAction) { switch (mode) { case ProcessMode.Teaching: - HighlightNextObject(nextStepOrAction as ActionWithDescription); // 高亮显示下一个需要点击的物体 + HighlightNextObject(stepOrAction as ActionWithDescription); // 高亮下一个需要点击的物体 break; case ProcessMode.Training: - // 在培训模式下只打印下一步骤或动作的描述 - if (nextStepOrAction is ActionWithDescription action) + if (stepOrAction is ActionWithDescription action) { Debug.Log($"培训模式:{action.Description}"); - OnSendMessagePrompt("提示:" + action.Description); + OnSendMessagePrompt?.Invoke("提示:" + action.Description); + // ShowTrainingStep(action.Description); // 在右上角显示流程步骤 } - else if (nextStepOrAction is AnimationStep step) + else if (stepOrAction is AnimationStep step) { if (step.Actions.Count > 0) { Debug.Log($"培训模式:{step.Actions[0].Description}"); - OnSendMessagePrompt("提示:" + step.Actions[0].Description); + OnSendMessagePrompt?.Invoke("提示:" + step.Actions[0].Description); + // ShowTrainingStep(step.Actions[0].Description); // 在右上角显示流程步骤 } } break; case ProcessMode.Practice: - // 练习模式下不需要提前显示下一个步骤的描述 + if (stepOrAction is ActionWithDescription practiceAction) + { + if (IsLastAction(practiceAction)) + { + ShowPracticeStep(practiceAction.Description); // 只显示当前步骤 + } + } + else if (stepOrAction is AnimationStep practiceStep) + { + if (practiceStep.Actions.Count > 0) + { + if (IsLastAction(practiceStep.Actions[0])) + { + ShowPracticeStep(practiceStep.Actions[0].Description); // 只显示当前步骤 + } + } + } + break; case ProcessMode.Assessment: // 考核模式无提示 @@ -255,38 +253,6 @@ namespace DefaultNamespace.ProcessMode } } - - /// - /// 处理模式特定的反馈逻辑 - /// - /// 当前的流程模式 - /// 当前的动作 - private void HandleModeSpecificFeedback(ProcessMode mode, ActionWithDescription action) - { - if (action.FeedbackDisplayed) - { - return; // 已经显示过反馈,不再重复显示 - } - - switch (mode) - { - case ProcessMode.Teaching: - HighlightNextObject(action); // 高亮下一个需要点击的物体 - break; - case ProcessMode.Training: - //ShowTrainingStep(action.Description); // 在右上角显示流程步骤 - break; - case ProcessMode.Practice: - ShowPracticeStep(action.Description); // 只显示当前步骤 - break; - case ProcessMode.Assessment: - // 考核模式无提示 - break; - } - - action.FeedbackDisplayed = true; // 标记反馈已显示 - } - /// /// 高亮显示下一个需要点击的物体 /// @@ -295,21 +261,60 @@ namespace DefaultNamespace.ProcessMode { if (action != null) { + bool hasDuplicates = action.TargetObjects.GroupBy(x => x).Any(g => g.Count() > 1); + for (int i = action.CurrentObjectIndex; i < action.TargetObjects.Count; i++) { - GameObject nextObject = action.TargetObjects[i]; - if (!action.ClickedObjects.Contains(nextObject)) + string nextObject = action.TargetObjects[i]; + if (hasDuplicates) { - // 添加高亮效果的逻辑 - GameObject.Find(nextObject.name).GetComponent().highlighted = true; - - Debug.Log($"高亮显示:{nextObject.name}"); - break; + // 处理重复物体的高亮逻辑 + int count = action.TargetObjects.Take(i).Count(o => o == nextObject); // 统计当前物体之前出现的次数 + if (!action.ClickedObjects.Contains($"{nextObject}_{count}")) + { + HighlightObject(nextObject); + break; + } + } + else + { + // 无重复物体的高亮逻辑 + if (!action.ClickedObjects.Contains(nextObject)) + { + HighlightObject(nextObject); + break; + } } } } } + /// + /// 高亮指定的物体 + /// + /// 物体名称 + private void HighlightObject(string objectName) + { + try + { + var obj = GameObject.Find(objectName); + if (obj != null) + { + var highlightEffect = obj.GetComponent(); + if (highlightEffect != null) + { + highlightEffect.highlighted = true; + } + + Debug.Log($"高亮显示:{objectName}"); + } + } + catch (Exception e) + { + Debug.LogError($"Error highlighting object {objectName}: {e.Message}"); + } + } + /// /// 设置当前模式 /// @@ -321,27 +326,14 @@ namespace DefaultNamespace.ProcessMode currentActionIndex = 0; } - private void ShowTrainingStep(object nextStepOrAction) - { - if (nextStepOrAction is AnimationStep step) - { - Debug.Log($"培训模式:{step.StepDescription}"); - } - else if (nextStepOrAction is ActionWithDescription action) - { - Debug.Log($"培训模式:{action.Description}"); - } - } + private void ShowPracticeStep(object nextStepOrAction) { - if (nextStepOrAction is AnimationStep step) + if (nextStepOrAction is ActionWithDescription practiceAction) { - Debug.Log($"练习模式:{step.StepDescription}"); - } - else if (nextStepOrAction is ActionWithDescription action) - { - Debug.Log($"练习模式:{action.Description}"); + OnSendMessagePrompt(practiceAction.Description); + Debug.Log($"练习模式:{practiceAction.Description}"); } } diff --git a/SXElectricityInformationAcquisition/Assets/Scripts/ProcessMode/ProcessMode.cs b/SXElectricityInformationAcquisition/Assets/Scripts/ProcessMode/ProcessMode.cs index 9234b3e7..b16df286 100644 --- a/SXElectricityInformationAcquisition/Assets/Scripts/ProcessMode/ProcessMode.cs +++ b/SXElectricityInformationAcquisition/Assets/Scripts/ProcessMode/ProcessMode.cs @@ -5,10 +5,22 @@ namespace DefaultNamespace.ProcessMode /// public enum ProcessMode { - Teaching, // 教学模式 - Training, // 培训模式 - Practice, // 练习模式 - Assessment // 考核模式 + /// + /// 教学模式 + /// + Teaching, + /// + /// 培训模式 + /// + Training, + /// + /// 练习模式 + /// + Practice, + /// + /// 考核模式 + /// + Assessment } } \ No newline at end of file diff --git a/SXElectricityInformationAcquisition/Assets/Scripts/ProcessMode/SceneProcessLauncher.cs b/SXElectricityInformationAcquisition/Assets/Scripts/ProcessMode/SceneProcessLauncher.cs index aef4df16..bdb091de 100644 --- a/SXElectricityInformationAcquisition/Assets/Scripts/ProcessMode/SceneProcessLauncher.cs +++ b/SXElectricityInformationAcquisition/Assets/Scripts/ProcessMode/SceneProcessLauncher.cs @@ -10,70 +10,75 @@ using UnityEngine; namespace DefaultNamespace.ProcessMode { - [ScriptDescription("现场场景的流程启动器")] + [ScriptDescription("场景的流程启动器")] public class SceneProcessLauncher : MonoBehaviour { private AnimationProcessManager processManager; - + [SerializeField] private ToolsPackScene _toolsPackScene; + [SerializeField] private ProcessMode _processMode; private async void Start() { await Task.Delay(TimeSpan.FromSeconds(1)); - - + + processManager = MotionEngine.GetModule(); - + processManager.ClearProcess(); - - processManager.AddProcess(MotionEngine.GetModule().GetProcessMode().ToString()); - - string json = System.IO.File.ReadAllText(Application.streamingAssetsPath + "/DataConfig/SceneStepData.json"); + + _processMode = MotionEngine.GetModule().GetProcessMode(); + + + processManager.AddProcess(_processMode.ToString()); + + string json = ""; + + if (_toolsPackScene == ToolsPackScene.工具间) + { + json = System.IO.File.ReadAllText(Application.streamingAssetsPath + "/DataConfig/ToolsSceneStepData.json"); + } + else + { + json = System.IO.File.ReadAllText(Application.streamingAssetsPath + "/DataConfig/SceneStepData.json"); + } + StepsContainer stepsContainer = JsonConvert.DeserializeObject(json); - + foreach (var stepData in stepsContainer.Steps) { List actions = new List(); foreach (var actionData in stepData.Actions) { - List targetObjects = new List(); + List targetObjects = new List(); foreach (var objectName in actionData.TargetObjects) { - GameObject obj = GameObject.Find(objectName); - if (obj != null) - { - targetObjects.Add(obj); - } - else - { - Debug.LogError($"Object not found: {objectName}"); - } + targetObjects.Add(objectName); } Action action = () => { }; - actions.Add(new ActionWithDescription(targetObjects, action, actionData.Description, actionData.IsSequential,stepData.StepDescription)); + actions.Add(new ActionWithDescription(targetObjects, action, actionData.Description, actionData.IsSequential, stepData.StepDescription)); } AnimationStep step = new AnimationStep(stepData.StepDescription, stepData.Score, actions); - processManager.AddStepToProcess(MotionEngine.GetModule().GetProcessMode().ToString(), step); + processManager.AddStepToProcess(_processMode.ToString(), step); } - InitializeFirstStep(); - + if (_processMode == ProcessMode.Teaching) + InitializeFirstStep(); } - + private void InitializeFirstStep() { - ProcessMode initialMode = ProcessMode.Training; // 假设初始模式是教学模式 - MotionEngine.GetModule().SetCurrentMode(initialMode); + MotionEngine.GetModule().SetCurrentMode(_processMode); if (MotionEngine.GetModule().CurrentProcess.Steps.Count > 0) { AnimationStep firstStep = MotionEngine.GetModule().CurrentProcess.Steps[0]; if (firstStep.Actions.Count > 0) { - MotionEngine.GetModule().PrepareNextStep(initialMode, firstStep.Actions[0]); + MotionEngine.GetModule().HandleModeFeedback(_processMode, firstStep.Actions[0]); } } } diff --git a/SXElectricityInformationAcquisition/Assets/Scripts/ToolsPack/ToolsPackGameObjectComponent.cs b/SXElectricityInformationAcquisition/Assets/Scripts/ToolsPack/ToolsPackGameObjectComponent.cs index b0ab5d0d..001df33c 100644 --- a/SXElectricityInformationAcquisition/Assets/Scripts/ToolsPack/ToolsPackGameObjectComponent.cs +++ b/SXElectricityInformationAcquisition/Assets/Scripts/ToolsPack/ToolsPackGameObjectComponent.cs @@ -46,7 +46,7 @@ namespace ToolsPack if ( MotionEngine.GetModule().GetToolsPackScene() == ToolsPackScene.工具间) { - MotionEngine.GetModule().HandleClick(this.gameObject); + MotionEngine.GetModule().HandleClick(this.gameObject.name); if (IsClick) MotionEngine.GetModule().AddToolsPack(this.name, this.gameObject); this.gameObject.SetActive(false); diff --git a/SXElectricityInformationAcquisition/Assets/Scripts/ToolsPack/ToolsSceneProcessLauncher.cs b/SXElectricityInformationAcquisition/Assets/Scripts/ToolsPack/ToolsSceneProcessLauncher.cs index b0f44a31..80e0054a 100644 --- a/SXElectricityInformationAcquisition/Assets/Scripts/ToolsPack/ToolsSceneProcessLauncher.cs +++ b/SXElectricityInformationAcquisition/Assets/Scripts/ToolsPack/ToolsSceneProcessLauncher.cs @@ -1,86 +1,78 @@ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Threading.Tasks; -using DefaultNamespace; -using DefaultNamespace.Dto; -using DefaultNamespace.ProcessMode; -using MotionFramework; -using Newtonsoft.Json; -using UnityEngine; - -namespace ToolsPack -{ - - - [ScriptDescription("工具间场景的流程启动器")] - public class ToolsSceneProcessLauncher : MonoBehaviour - { - private AnimationProcessManager processManager; - - - private async void Start() - { - await Task.Delay(TimeSpan.FromSeconds(1)); - - - processManager = MotionEngine.GetModule(); - - - processManager.ClearProcess(); - - - processManager.AddProcess( MotionEngine.GetModule().GetProcessMode().ToString()); - - string json = System.IO.File.ReadAllText(Application.streamingAssetsPath + "/DataConfig/ToolsSceneStepData.json"); - StepsContainer stepsContainer = JsonConvert.DeserializeObject(json); - - - foreach (var stepData in stepsContainer.Steps) - { - List actions = new List(); - - foreach (var actionData in stepData.Actions) - { - List targetObjects = new List(); - foreach (var objectName in actionData.TargetObjects) - { - GameObject obj = GameObject.Find(objectName); - if (obj != null) - { - targetObjects.Add(obj); - } - else - { - // Debug.LogError($"Object not found: {objectName}"); - } - } - - Action action = () => { }; - actions.Add(new ActionWithDescription(targetObjects, action, actionData.Description, actionData.IsSequential,stepData.StepDescription)); - } - - AnimationStep step = new AnimationStep(stepData.StepDescription, stepData.Score, actions); - processManager.AddStepToProcess(MotionEngine.GetModule().GetProcessMode().ToString(), step); - } - - InitializeFirstStep(); - - } - - private void InitializeFirstStep() - { - MotionEngine.GetModule().SetCurrentMode(MotionEngine.GetModule().GetProcessMode()); - - if (MotionEngine.GetModule().CurrentProcess.Steps.Count > 0) - { - AnimationStep firstStep = MotionEngine.GetModule().CurrentProcess.Steps[0]; - if (firstStep.Actions.Count > 0) - { - MotionEngine.GetModule().PrepareNextStep(MotionEngine.GetModule().GetProcessMode(), firstStep.Actions[0]); - } - } - } - - } -} \ No newline at end of file +// using System; +// using System.Collections; +// using System.Collections.Generic; +// using System.Threading.Tasks; +// using DefaultNamespace; +// using DefaultNamespace.Dto; +// using DefaultNamespace.ProcessMode; +// using MotionFramework; +// using Newtonsoft.Json; +// using UnityEngine; +// +// namespace ToolsPack +// { +// +// +// [ScriptDescription("工具间场景的流程启动器")] +// public class ToolsSceneProcessLauncher : MonoBehaviour +// { +// private AnimationProcessManager processManager; +// +// +// private async void Start() +// { +// await Task.Delay(TimeSpan.FromSeconds(1)); +// +// +// processManager = MotionEngine.GetModule(); +// +// +// processManager.ClearProcess(); +// +// +// processManager.AddProcess( MotionEngine.GetModule().GetProcessMode().ToString()); +// +// string json = +// StepsContainer stepsContainer = JsonConvert.DeserializeObject(json); +// +// +// foreach (var stepData in stepsContainer.Steps) +// { +// List actions = new List(); +// +// foreach (var actionData in stepData.Actions) +// { +// List targetObjects = new List(); +// foreach (var objectName in actionData.TargetObjects) +// { +// targetObjects.Add(objectName); +// } +// +// Action action = () => { }; +// actions.Add(new ActionWithDescription(targetObjects, action, actionData.Description, actionData.IsSequential,stepData.StepDescription)); +// } +// +// AnimationStep step = new AnimationStep(stepData.StepDescription, stepData.Score, actions); +// processManager.AddStepToProcess(MotionEngine.GetModule().GetProcessMode().ToString(), step); +// } +// +// InitializeFirstStep(); +// +// } +// +// private void InitializeFirstStep() +// { +// MotionEngine.GetModule().SetCurrentMode(MotionEngine.GetModule().GetProcessMode()); +// +// if (MotionEngine.GetModule().CurrentProcess.Steps.Count > 0) +// { +// AnimationStep firstStep = MotionEngine.GetModule().CurrentProcess.Steps[0]; +// if (firstStep.Actions.Count > 0) +// { +// MotionEngine.GetModule().HandleModeFeedback(MotionEngine.GetModule().GetProcessMode(), firstStep.Actions[0]); +// } +// } +// } +// +// } +// } \ No newline at end of file diff --git a/SXElectricityInformationAcquisition/Assets/Scripts/test1.cs b/SXElectricityInformationAcquisition/Assets/Scripts/test1.cs index a0fef79a..a4188c79 100644 --- a/SXElectricityInformationAcquisition/Assets/Scripts/test1.cs +++ b/SXElectricityInformationAcquisition/Assets/Scripts/test1.cs @@ -14,7 +14,7 @@ public class test1 : MonoBehaviour { this.GetComponent