From 5ad1d14b3db4beadfff93e09d5a1b476711bf8d3 Mon Sep 17 00:00:00 2001 From: yzx Date: Wed, 12 Jun 2024 10:34:39 +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 --- .../Assembly-CSharp.csproj | 7 + .../Assets/Editor/ScriptDescriptionEditor.cs | 3 + .../Assets/Framework/GameLauncher.cs | 5 + .../Model/电线杆/Mat/绝缘胶带绑线p1.mat | 12 +- .../Assets/Scenes/现场 _Test.unity | 186 +++++++++++------- .../Assets/Screwdriver.cs | 3 +- .../ProcessMode/ActionWithDescription.cs | 24 +++ .../ProcessMode/ActionWithDescription.cs.meta | 3 + .../ProcessMode/AnimationProcessManager.cs | 172 +++++++++------- .../Scripts/ProcessMode/AnimationStep.cs | 30 ++- .../Scripts/ProcessMode/IncorrectClick.cs | 19 ++ .../ProcessMode/IncorrectClick.cs.meta | 3 + .../Scripts/ProcessMode/ProcessUIManager.cs | 169 ++++++++-------- .../Assets/Scripts/ProcessMode/test.cs | 71 ++++--- .../ToolsPack/ToolsPackGameObjectComponent.cs | 2 +- .../taoruiqi/Script/ElectricCheckPen.cs | 2 +- 16 files changed, 434 insertions(+), 277 deletions(-) create mode 100644 SXElectricityInformationAcquisition/Assets/Scripts/ProcessMode/ActionWithDescription.cs create mode 100644 SXElectricityInformationAcquisition/Assets/Scripts/ProcessMode/ActionWithDescription.cs.meta create mode 100644 SXElectricityInformationAcquisition/Assets/Scripts/ProcessMode/IncorrectClick.cs create mode 100644 SXElectricityInformationAcquisition/Assets/Scripts/ProcessMode/IncorrectClick.cs.meta diff --git a/SXElectricityInformationAcquisition/Assembly-CSharp.csproj b/SXElectricityInformationAcquisition/Assembly-CSharp.csproj index 4e776b20..5fa77af0 100644 --- a/SXElectricityInformationAcquisition/Assembly-CSharp.csproj +++ b/SXElectricityInformationAcquisition/Assembly-CSharp.csproj @@ -45,12 +45,14 @@ + + @@ -65,6 +67,7 @@ + @@ -109,6 +112,7 @@ + @@ -162,8 +166,10 @@ + + @@ -174,6 +180,7 @@ + diff --git a/SXElectricityInformationAcquisition/Assets/Editor/ScriptDescriptionEditor.cs b/SXElectricityInformationAcquisition/Assets/Editor/ScriptDescriptionEditor.cs index 6c268ad8..a5a3ef7f 100644 --- a/SXElectricityInformationAcquisition/Assets/Editor/ScriptDescriptionEditor.cs +++ b/SXElectricityInformationAcquisition/Assets/Editor/ScriptDescriptionEditor.cs @@ -6,6 +6,9 @@ public class ScriptDescriptionEditor : Editor { private GUIStyle descriptionStyle; + + + private void OnEnable() { descriptionStyle = new GUIStyle(EditorStyles.label) diff --git a/SXElectricityInformationAcquisition/Assets/Framework/GameLauncher.cs b/SXElectricityInformationAcquisition/Assets/Framework/GameLauncher.cs index a09e7d95..1566c126 100644 --- a/SXElectricityInformationAcquisition/Assets/Framework/GameLauncher.cs +++ b/SXElectricityInformationAcquisition/Assets/Framework/GameLauncher.cs @@ -2,6 +2,7 @@ using System; using System.Collections; using System.Collections.Generic; using DefaultNamespace; +using DefaultNamespace.ProcessMode; using Framework.Scripts.Runtime.Engine.Engine.Camera; using UnityEngine; @@ -64,6 +65,10 @@ public class GameLauncher : MonoBehaviour MotionEngine.CreateModule(); //ļ MotionEngine.CreateModule(); + + //̹ + MotionEngine.CreateModule(); + } private void HandleMotionFrameworkLog(ELogLevel logLevel, string log) diff --git a/SXElectricityInformationAcquisition/Assets/Model/电线杆/Mat/绝缘胶带绑线p1.mat b/SXElectricityInformationAcquisition/Assets/Model/电线杆/Mat/绝缘胶带绑线p1.mat index 2fa1692f..50c8efb9 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: 1 - - _step_p2: 1 - - _step_p3: 1 - - _step_p4: 1 - - _step_p5: 1 - - _step_p6: 1 + - _step_p1: 0 + - _step_p2: 0 + - _step_p3: 0 + - _step_p4: 0 + - _step_p5: 0 + - _step_p6: 0 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/Scenes/现场 _Test.unity b/SXElectricityInformationAcquisition/Assets/Scenes/现场 _Test.unity index 71626596..4aea1a28 100644 --- a/SXElectricityInformationAcquisition/Assets/Scenes/现场 _Test.unity +++ b/SXElectricityInformationAcquisition/Assets/Scenes/现场 _Test.unity @@ -20720,6 +20720,63 @@ Transform: m_Children: [] m_Father: {fileID: 1886732940} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1001 &1199227227 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1091812145067508994, guid: fa12b84946083d14cb4447029910be28, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1091812145067508994, guid: fa12b84946083d14cb4447029910be28, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1091812145067508994, guid: fa12b84946083d14cb4447029910be28, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1091812145067508994, guid: fa12b84946083d14cb4447029910be28, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 1091812145067508994, guid: fa12b84946083d14cb4447029910be28, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1091812145067508994, guid: fa12b84946083d14cb4447029910be28, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1091812145067508994, guid: fa12b84946083d14cb4447029910be28, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1091812145067508994, guid: fa12b84946083d14cb4447029910be28, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1091812145067508994, guid: fa12b84946083d14cb4447029910be28, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1091812145067508994, guid: fa12b84946083d14cb4447029910be28, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6026879024415736155, guid: fa12b84946083d14cb4447029910be28, type: 3} + propertyPath: m_Name + value: APP + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: fa12b84946083d14cb4447029910be28, type: 3} --- !u!1 &1203342266 GameObject: m_ObjectHideFlags: 0 @@ -26534,6 +26591,64 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1513575210} m_CullTransparentMesh: 1 +--- !u!1 &1516723166 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1516723168} + - component: {fileID: 1516723167} + - component: {fileID: 1516723169} + m_Layer: 0 + m_Name: GameObject + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1516723167 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1516723166} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 51f73ee94f284a86b677a6bc74544094, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!4 &1516723168 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1516723166} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 303.8186, y: 1.9446667, z: 164.25206} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1516723169 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1516723166} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 63b7e72fa2d34c0ca56c938039f733e2, type: 3} + m_Name: + m_EditorClassIdentifier: + toolsPackScene: 1 --- !u!1 &1521115505 GameObject: m_ObjectHideFlags: 0 @@ -28056,74 +28171,6 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1588077158} m_CullTransparentMesh: 1 ---- !u!1 &1610656807 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1610656810} - - component: {fileID: 1610656809} - - component: {fileID: 1610656808} - m_Layer: 0 - m_Name: EventSystem - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &1610656808 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1610656807} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4f231c4fb786f3946a6b90b886c48677, type: 3} - m_Name: - m_EditorClassIdentifier: - m_SendPointerHoverToParent: 1 - m_HorizontalAxis: Horizontal - m_VerticalAxis: Vertical - m_SubmitButton: Submit - m_CancelButton: Cancel - m_InputActionsPerSecond: 10 - m_RepeatDelay: 0.5 - m_ForceModuleActive: 0 ---- !u!114 &1610656809 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1610656807} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 76c392e42b5098c458856cdf6ecaaaa1, type: 3} - m_Name: - m_EditorClassIdentifier: - m_FirstSelected: {fileID: 0} - m_sendNavigationEvents: 1 - m_DragThreshold: 10 ---- !u!4 &1610656810 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1610656807} - serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 0} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1614669908 GameObject: m_ObjectHideFlags: 0 @@ -230358,9 +230405,10 @@ SceneRoots: - {fileID: 1886732940} - {fileID: 1467737217} - {fileID: 826737787} - - {fileID: 1610656810} - {fileID: 1805985062} - {fileID: 1204801357} - {fileID: 1987581050} - {fileID: 1505150131} - {fileID: 1986025700} + - {fileID: 1516723168} + - {fileID: 1199227227} diff --git a/SXElectricityInformationAcquisition/Assets/Screwdriver.cs b/SXElectricityInformationAcquisition/Assets/Screwdriver.cs index 84f64228..8b65442f 100644 --- a/SXElectricityInformationAcquisition/Assets/Screwdriver.cs +++ b/SXElectricityInformationAcquisition/Assets/Screwdriver.cs @@ -40,7 +40,7 @@ public class Screwdriver : MonoBehaviour /// /// ˿ - /// + /// a public GameObject[] ScrewObj; /// @@ -202,6 +202,7 @@ public class Screwdriver : MonoBehaviour ScrewL.gameObject.SetActive(false); } + /// /// Ҳ˿ /// diff --git a/SXElectricityInformationAcquisition/Assets/Scripts/ProcessMode/ActionWithDescription.cs b/SXElectricityInformationAcquisition/Assets/Scripts/ProcessMode/ActionWithDescription.cs new file mode 100644 index 00000000..e87a7abf --- /dev/null +++ b/SXElectricityInformationAcquisition/Assets/Scripts/ProcessMode/ActionWithDescription.cs @@ -0,0 +1,24 @@ +using System; +using System.Collections.Generic; +using UnityEngine; + +namespace DefaultNamespace.ProcessMode +{ + public class ActionWithDescription + { + public List TargetObjects { get; set; } // 需要点击的目标物体列表 + public Action Action { get; set; } // 与点击关联的动画或反应 + public string Description { get; set; } // 动作描述 + public int CurrentObjectIndex { get; set; } // 当前对象的点击索引 + + public ActionWithDescription(List targetObjects, Action action, string description) + { + TargetObjects = targetObjects ?? new List(); + Action = action; + Description = description; + CurrentObjectIndex = 0; // 初始化为第一个对象 + } + } + + +} \ No newline at end of file diff --git a/SXElectricityInformationAcquisition/Assets/Scripts/ProcessMode/ActionWithDescription.cs.meta b/SXElectricityInformationAcquisition/Assets/Scripts/ProcessMode/ActionWithDescription.cs.meta new file mode 100644 index 00000000..db09fd60 --- /dev/null +++ b/SXElectricityInformationAcquisition/Assets/Scripts/ProcessMode/ActionWithDescription.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: f69314a2c8ae4f2f9463f3d3a29d7a30 +timeCreated: 1718109086 \ No newline at end of file diff --git a/SXElectricityInformationAcquisition/Assets/Scripts/ProcessMode/AnimationProcessManager.cs b/SXElectricityInformationAcquisition/Assets/Scripts/ProcessMode/AnimationProcessManager.cs index 7c0f6eb0..98fe11fd 100644 --- a/SXElectricityInformationAcquisition/Assets/Scripts/ProcessMode/AnimationProcessManager.cs +++ b/SXElectricityInformationAcquisition/Assets/Scripts/ProcessMode/AnimationProcessManager.cs @@ -1,3 +1,4 @@ +using System; using System.Collections.Generic; using MotionFramework; using UnityEngine; @@ -6,40 +7,16 @@ using UnityEngine.UI; namespace DefaultNamespace.ProcessMode { [ScriptDescription("流程模式管理器")] - public class AnimationProcessManager : MonoBehaviour + public class AnimationProcessManager : ModuleSingleton, IModule { - private Dictionary processes; // 存储不同类型流程的字典 + private Dictionary processes = new Dictionary(); public ProcessMode currentMode; // 当前模式 private int currentStepIndex; // 当前步骤索引 - private ProcessUIManager uiManager; // 引用UIManager实例 + private int currentActionIndex; // 当前动作索引,确保动作顺序 + private int currentActionGameIndex; // 当前动作索引,确保动作顺序 + private List incorrectClicks; // 错误点击的记录列表 - /// - /// 构造函数 - /// - /// UIManager实例 - public AnimationProcessManager(ProcessUIManager uiManager) - { - this.uiManager = uiManager; - processes = new Dictionary(); - InitializeProcesses(); // 初始化流程 - currentStepIndex = 0; - } - /// - /// 初始化所有流程 - /// - private void InitializeProcesses() - { - AddProcess("Teaching"); // 添加教学流程 - AddProcess("Training"); // 添加培训流程 - AddProcess("Practice"); // 添加练习流程 - AddProcess("Assessment"); // 添加考核流程 - } - - /// - /// 添加一个新的流程 - /// - /// 流程类型 public void AddProcess(string type) { if (!processes.ContainsKey(type)) @@ -48,11 +25,6 @@ namespace DefaultNamespace.ProcessMode } } - /// - /// 向指定类型的流程中添加步骤 - /// - /// 流程类型 - /// 要添加的步骤 public void AddStepToProcess(string type, AnimationStep step) { if (processes.ContainsKey(type)) @@ -61,24 +33,6 @@ namespace DefaultNamespace.ProcessMode } } - /// - /// 获取指定类型流程的总评分 - /// - /// 流程类型 - /// 总评分 - public float GetTotalScoreForProcess(string type) - { - if (processes.ContainsKey(type)) - { - return processes[type].CalculateTotalScore(); - } - return 0; - } - - /// - /// 处理用户点击事件 - /// - /// 被点击的对象 public void HandleClick(GameObject clickedObject) { string type = currentMode.ToString(); @@ -90,35 +44,113 @@ namespace DefaultNamespace.ProcessMode if (currentStepIndex < process.Steps.Count) { AnimationStep step = process.Steps[currentStepIndex]; + ActionWithDescription currentAction = step.Actions[currentActionIndex]; - if (step.CorrectObject == clickedObject) + // 检查当前点击是否为当前动作预期的对象 + if (currentAction.CurrentObjectIndex < currentAction.TargetObjects.Count && + currentAction.TargetObjects[currentAction.CurrentObjectIndex] == clickedObject) { - step.PlayAnimation(); + Debug.Log($"正确点击了:{clickedObject.name}"); + currentAction.CurrentObjectIndex++; // 正确点击,递增对象索引 - switch (currentMode) + // 检查是否完成了当前动作中的所有对象点击 + if (currentAction.CurrentObjectIndex >= currentAction.TargetObjects.Count) { - case ProcessMode.Teaching: - uiManager.HighlightNextStep(step); // 高亮下一个步骤 - break; - case ProcessMode.Training: - uiManager.ShowTrainingStep(step); // 显示培训步骤 - break; - case ProcessMode.Practice: - uiManager.ShowPracticeStep(step); // 显示练习步骤 - break; - case ProcessMode.Assessment: - // 无提示 - break; - } + Debug.Log($"完成了动作 {currentActionIndex + 1}"); + step.PlayAnimation(currentActionIndex); // 播放当前动作的动画 + DisplayActionFeedback(currentMode, currentAction); // 显示反馈 - currentStepIndex++; + // 重置当前动作对象索引,并准备下一个动作 + currentActionIndex++; + currentAction.CurrentObjectIndex = 0; + + if (currentActionIndex >= step.Actions.Count) + { + Debug.Log("所有动作完成!"); + currentActionIndex = 0; // 重置动作索引或进入下一个大步骤 + currentStepIndex++; + } + else + { + Debug.Log("开始下一个动作!"); + PrepareNextStep(currentMode, process, currentStepIndex); + } + } } else { - Debug.Log("Incorrect object clicked."); + Debug.Log($"错误点击或顺序错误:{clickedObject.name}"); + // 错误点击处理,可以选择重置当前动作的索引或其他处理逻辑 } } } } + + + private void DisplayActionFeedback(ProcessMode mode, ActionWithDescription action) + { + switch (mode) + { + case ProcessMode.Teaching: + // 高亮显示下一个需要点击的地方 + // HighlightNextStep(action.); + break; + case ProcessMode.Training: + // 在画面右上角显示流程步骤 + // uiManager.ShowTrainingStep(action.Description); + break; + case ProcessMode.Practice: + // 只显示当前步骤 + // uiManager.ShowPracticeStep(action.Description); + break; + case ProcessMode.Assessment: + // 无任何提示 + break; + } + } + + private void PrepareNextStep(ProcessMode mode, AnimationProcess process, int nextStepIndex) + { + if (nextStepIndex < process.Steps.Count) + { + ActionWithDescription nextAction = process.Steps[nextStepIndex].Actions[0]; + if (mode == ProcessMode.Teaching) + { + // HighlightNextStep(nextAction.TargetObject); + } + else if (mode == ProcessMode.Training) + { + // uiManager.ShowTrainingStep("开始下一个步骤..."); + } + } + else + { + // uiManager.DisplayMessage("所有步骤完成!"); + } + } + + private void HighlightNextStep(GameObject target) + { + // 实现高亮逻辑,比如改变对象颜色或添加光环效果 + } + + + public void OnCreate(object createParam) + { + processes = new Dictionary(); + incorrectClicks = new List(); + } + + public void OnUpdate() + { + } + + public void OnDestroy() + { + } + + public void OnGUI() + { + } } } \ No newline at end of file diff --git a/SXElectricityInformationAcquisition/Assets/Scripts/ProcessMode/AnimationStep.cs b/SXElectricityInformationAcquisition/Assets/Scripts/ProcessMode/AnimationStep.cs index 7f27f184..418d8aeb 100644 --- a/SXElectricityInformationAcquisition/Assets/Scripts/ProcessMode/AnimationStep.cs +++ b/SXElectricityInformationAcquisition/Assets/Scripts/ProcessMode/AnimationStep.cs @@ -9,32 +9,24 @@ namespace DefaultNamespace.ProcessMode /// public class AnimationStep { - public string Description { get; set; } // 步骤描述 + public string StepDescription { get; set; } // 步骤描述 public float Score { get; set; } // 步骤评分 - public Action Animation { get; private set; } // DOTween动画 - public GameObject CorrectObject { get; set; } // 正确的点击对象 + public List Actions { get; private set; } // 动作列表 - /// - /// 构造函数 - /// - /// 步骤描述 - /// 步骤评分 - /// 要播放的动画 - /// 正确的点击对象 - public AnimationStep(string description, float score, Action animation, GameObject correctObject) + public AnimationStep(string stepDescription, float score, List actions) { - Description = description; + StepDescription = stepDescription; Score = score; - Animation = animation; - CorrectObject = correctObject; + Actions = actions; } - /// - /// 播放动画 - /// - public void PlayAnimation() + public void PlayAnimation(int index) { - Animation?.Invoke(); + if (index >= 0 && index < Actions.Count) + { + Actions[index].Action?.Invoke(); // 执行动画 + Debug.Log(Actions[index].Description); // 输出动作描述 + } } } } \ No newline at end of file diff --git a/SXElectricityInformationAcquisition/Assets/Scripts/ProcessMode/IncorrectClick.cs b/SXElectricityInformationAcquisition/Assets/Scripts/ProcessMode/IncorrectClick.cs new file mode 100644 index 00000000..009f4b89 --- /dev/null +++ b/SXElectricityInformationAcquisition/Assets/Scripts/ProcessMode/IncorrectClick.cs @@ -0,0 +1,19 @@ +using UnityEngine; + +namespace DefaultNamespace.ProcessMode +{ + public class IncorrectClick + { + public GameObject ClickedObject { get; set; } + public int StepIndex { get; set; } + public int ActionIndex { get; set; } // 新增:动作索引 + + public IncorrectClick(GameObject clickedObject, int stepIndex, int actionIndex) + { + ClickedObject = clickedObject; + StepIndex = stepIndex; + ActionIndex = actionIndex; + } + } + +} \ No newline at end of file diff --git a/SXElectricityInformationAcquisition/Assets/Scripts/ProcessMode/IncorrectClick.cs.meta b/SXElectricityInformationAcquisition/Assets/Scripts/ProcessMode/IncorrectClick.cs.meta new file mode 100644 index 00000000..80d9aae4 --- /dev/null +++ b/SXElectricityInformationAcquisition/Assets/Scripts/ProcessMode/IncorrectClick.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: e49a83ec6ff240d38d3b702d006793b2 +timeCreated: 1718155453 \ No newline at end of file diff --git a/SXElectricityInformationAcquisition/Assets/Scripts/ProcessMode/ProcessUIManager.cs b/SXElectricityInformationAcquisition/Assets/Scripts/ProcessMode/ProcessUIManager.cs index ec81864f..478cbea5 100644 --- a/SXElectricityInformationAcquisition/Assets/Scripts/ProcessMode/ProcessUIManager.cs +++ b/SXElectricityInformationAcquisition/Assets/Scripts/ProcessMode/ProcessUIManager.cs @@ -1,84 +1,85 @@ -using UnityEngine; -using UnityEngine.UI; - -namespace DefaultNamespace.ProcessMode -{ - public class ProcessUIManager - { - public Text trainingTextBox; // 培训模式的文本框 - public Text practiceTextBox; // 练习模式的文本框 - public GameObject highlightObject; // 高亮对象,用于教学模式 - - public AnimationProcessManager processManager; // 流程管理器实例 - - private void Start() - { - processManager = new AnimationProcessManager(this); // 传递UIManager实例 - } - - private void Update() - { - if (Input.GetMouseButtonDown(0)) - { - GameObject clickedObject = DetectClickedObject(); - if (clickedObject != null) - { - processManager.HandleClick(clickedObject); - } - } - } - - /// - /// 检测点击的对象 - /// - /// 点击的对象 - private GameObject DetectClickedObject() - { - Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); - RaycastHit hit; - if (Physics.Raycast(ray, out hit)) - { - return hit.collider.gameObject; - } - return null; - } - - /// - /// 显示培训步骤信息 - /// - /// 当前步骤 - public void ShowTrainingStep(AnimationStep step) - { - if (trainingTextBox != null) - { - trainingTextBox.text = step.Description; - } - } - - /// - /// 显示练习步骤信息 - /// - /// 当前步骤 - public void ShowPracticeStep(AnimationStep step) - { - if (practiceTextBox != null) - { - practiceTextBox.text = step.Description; - } - } - - /// - /// 高亮显示下一个需要点击的地方(教学模式) - /// - /// 当前步骤 - public void HighlightNextStep(AnimationStep step) - { - if (highlightObject != null) - { - highlightObject.SetActive(true); - // 假设你有一个方法来定位高亮对象 - // highlightObject.transform.position = ...; - } - } - } -} \ No newline at end of file +// using UnityEngine; +// using UnityEngine.UI; +// +// namespace DefaultNamespace.ProcessMode +// { +// public class ProcessUIManager : MonoBehaviour +// { +// public Text trainingTextBox; // 培训模式的文本框 +// public Text practiceTextBox; // 练习模式的文本框 +// public GameObject highlightObject; // 高亮对象,用于教学模式 +// +// public AnimationProcessManager processManager; // 流程管理器实例 +// +// private void Start() +// { +// processManager = new AnimationProcessManager(); // 传递UIManager实例 +// } +// +// private void Update() +// { +// if (Input.GetMouseButtonDown(0)) +// { +// GameObject clickedObject = DetectClickedObject(); +// if (clickedObject != null) +// { +// processManager.HandleClick(clickedObject); +// } +// } +// } +// +// /// +// /// 检测点击的对象 +// /// +// /// 点击的对象 +// private GameObject DetectClickedObject() +// { +// Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); +// RaycastHit hit; +// if (Physics.Raycast(ray, out hit)) +// { +// return hit.collider.gameObject; +// } +// +// return null; +// } +// +// /// +// /// 显示培训步骤信息 +// /// +// /// 当前步骤 +// public void ShowTrainingStep(AnimationStep step) +// { +// if (trainingTextBox != null) +// { +// trainingTextBox.text = step.Description; +// } +// } +// +// /// +// /// 显示练习步骤信息 +// /// +// /// 当前步骤 +// public void ShowPracticeStep(AnimationStep step) +// { +// if (practiceTextBox != null) +// { +// practiceTextBox.text = step.Description; +// } +// } +// +// /// +// /// 高亮显示下一个需要点击的地方(教学模式) +// /// +// /// 当前步骤 +// public void HighlightNextStep(AnimationStep step) +// { +// if (highlightObject != null) +// { +// highlightObject.SetActive(true); +// // 假设你有一个方法来定位高亮对象 +// // highlightObject.transform.position = ...; +// } +// } +// } +// } \ No newline at end of file diff --git a/SXElectricityInformationAcquisition/Assets/Scripts/ProcessMode/test.cs b/SXElectricityInformationAcquisition/Assets/Scripts/ProcessMode/test.cs index 0f2df60c..76e0d882 100644 --- a/SXElectricityInformationAcquisition/Assets/Scripts/ProcessMode/test.cs +++ b/SXElectricityInformationAcquisition/Assets/Scripts/ProcessMode/test.cs @@ -1,4 +1,8 @@ +using System; +using System.Collections; +using System.Collections.Generic; using DG.Tweening; +using MotionFramework; using UnityEngine; namespace DefaultNamespace.ProcessMode @@ -7,40 +11,54 @@ namespace DefaultNamespace.ProcessMode { private AnimationProcessManager processManager; - public GameObject device1; // 假设这是场景中的一个设备 - public GameObject device2; // 假设这是场景中的另一个设备 - private void Start() + private IEnumerator Start() { - processManager = GetComponent(); + processManager = MotionEngine.GetModule(); - // 设置模式 - processManager.currentMode = ProcessMode.Teaching; - // 创建步骤并避免未初始化的错误 - AnimationStep step1 = null; - AnimationStep step2 = null; + yield return new WaitForSeconds(1); + + processManager.AddProcess("Teaching"); + + List actions = CreateStepActions(); + AnimationStep step = new AnimationStep($"描述步骤", 100, actions); + processManager.AddStepToProcess("Teaching", step); - step1 = new AnimationStep("Step 1: Click device1", 10, () => - { - device1.transform.DOMove(new Vector3(0, 1, 0), 1).OnComplete(() => - { - processManager.AddStepToProcess("Teaching", step1); - }); - }, device1); + + // List actions1 = CreateStepActions1(); + // AnimationStep step1 = new AnimationStep($"描述步骤", 100, actions1); + // processManager.AddStepToProcess("Teaching", step1); + } - step2 = new AnimationStep("Step 2: Click device2", 20, () => - { - device2.transform.DOScale(new Vector3(2, 2, 2), 1).OnComplete(() => - { - processManager.AddStepToProcess("Teaching", step2); - }); - }, device2); + private List CreateStepActions() + { + List actions = new List(); - // 向流程中添加步骤 - processManager.AddStepToProcess("Teaching", step1); - processManager.AddStepToProcess("Teaching", step2); + GameObject obj1 = GameObject.Find("变电箱_门"); + GameObject 插座 = GameObject.Find("插座"); + Action action1 = () => { }; + Action action2 = () => { }; + + actions.Add(new ActionWithDescription(new List() { obj1,插座 }, action1, $"步骤 {1} 的动作描述")); + actions.Add(new ActionWithDescription(new List() { 插座,obj1}, action1, $"步骤 {2} 的动作描述")); + + return actions; + } + + private List CreateStepActions1() + { + List actions = new List(); + + GameObject obj1 = GameObject.Find("变电箱_门"); + GameObject 插座 = GameObject.Find("插座"); + Action action1 = () => { }; + + actions.Add(new ActionWithDescription(new List() { obj1 }, action1, $"步骤 {1} 的动作描述")); + actions.Add(new ActionWithDescription(new List() { 插座 }, action1, $"步骤 {2} 的动作描述")); + + return actions; } private void Update() @@ -64,6 +82,7 @@ namespace DefaultNamespace.ProcessMode { return hit.collider.gameObject; } + return null; } } diff --git a/SXElectricityInformationAcquisition/Assets/Scripts/ToolsPack/ToolsPackGameObjectComponent.cs b/SXElectricityInformationAcquisition/Assets/Scripts/ToolsPack/ToolsPackGameObjectComponent.cs index 0d3fa849..cf6121a1 100644 --- a/SXElectricityInformationAcquisition/Assets/Scripts/ToolsPack/ToolsPackGameObjectComponent.cs +++ b/SXElectricityInformationAcquisition/Assets/Scripts/ToolsPack/ToolsPackGameObjectComponent.cs @@ -15,7 +15,7 @@ namespace ToolsPack { private HighlightEffect _highlight; private int index; - [SerializeField] private ModelTypeEnum _modelTypeEnum; + [SerializeField] private ModelTypeEnum _modelTypeEnum; private void Awake() { diff --git a/SXElectricityInformationAcquisition/Assets/taoruiqi/Script/ElectricCheckPen.cs b/SXElectricityInformationAcquisition/Assets/taoruiqi/Script/ElectricCheckPen.cs index 909d2123..28157a69 100644 --- a/SXElectricityInformationAcquisition/Assets/taoruiqi/Script/ElectricCheckPen.cs +++ b/SXElectricityInformationAcquisition/Assets/taoruiqi/Script/ElectricCheckPen.cs @@ -69,7 +69,7 @@ public class ElectricCheckPen : MonoBehaviour { ElectricCheckPenOBJ.gameObject.transform.DOLocalMove(new Vector3(3.334f, 0.489f, 0.107f), 1f).OnComplete(() => { - + ElectricCheckPenOBJ.gameObject.transform.DOLocalRotate(new Vector3(20.78f, 72.47f, 171.503f), 1.5f).OnComplete(() => { Debug.Log("123");