diff --git a/Assets/Prefab/Gameplay/NumberSlot.prefab b/Assets/Prefab/Gameplay/NumberSlot.prefab new file mode 100644 index 0000000..5a8d422 --- /dev/null +++ b/Assets/Prefab/Gameplay/NumberSlot.prefab @@ -0,0 +1,149 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &1079693037897703353 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3692176305921728328} + - component: {fileID: 1875558020952416763} + - component: {fileID: 6958443043046651409} + - component: {fileID: 3036000835194628394} + - component: {fileID: 9057593411103083886} + - component: {fileID: 7384438008133576482} + - component: {fileID: 2187320556207737093} + m_Layer: 0 + m_Name: NumberSlot + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3692176305921728328 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1079693037897703353} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 10, y: 0.8, z: -5} + m_LocalScale: {x: 1.5, y: 1.5, z: 0.15} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &1875558020952416763 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1079693037897703353} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &6958443043046651409 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1079693037897703353} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 31321ba15b8f8eb4c954353edc038b1d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!65 &3036000835194628394 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1079693037897703353} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &9057593411103083886 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1079693037897703353} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 7986c88b8e1d4944832af56e23188597, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &7384438008133576482 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1079693037897703353} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2791e039b8344f45ad6dc86f5188d82d, type: 3} + m_Name: + m_EditorClassIdentifier: + isActive: 1 +--- !u!114 &2187320556207737093 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1079693037897703353} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 301178d89b6b43e0844e3d39aa579442, type: 3} + m_Name: + m_EditorClassIdentifier: + currentNumber: 0 + correctNumber: 1 diff --git a/Assets/Prefab/Gameplay/NumberSlot.prefab.meta b/Assets/Prefab/Gameplay/NumberSlot.prefab.meta new file mode 100644 index 0000000..6b06382 --- /dev/null +++ b/Assets/Prefab/Gameplay/NumberSlot.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 17ad2833fef1bc044bcc25a227730d74 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Prefab/Gameplay/PressurePlate.prefab b/Assets/Prefab/Gameplay/PressurePlate.prefab index 3860a8c..b184cbc 100644 --- a/Assets/Prefab/Gameplay/PressurePlate.prefab +++ b/Assets/Prefab/Gameplay/PressurePlate.prefab @@ -11,11 +11,10 @@ GameObject: - component: {fileID: 8123550679489282954} - component: {fileID: 2493044360019674672} - component: {fileID: 1538197780757662793} - - component: {fileID: 3944240041841304458} - component: {fileID: 8785614081330407045} - component: {fileID: 220912239936987690} - - component: {fileID: 7681678543859060545} - component: {fileID: -7803032184951374842} + - component: {fileID: 4542395966412092557} m_Layer: 0 m_Name: PressurePlate m_TagString: Untagged @@ -88,33 +87,6 @@ MeshRenderer: m_SortingLayer: 0 m_SortingOrder: 0 m_AdditionalVertexStreams: {fileID: 0} ---- !u!54 &3944240041841304458 -Rigidbody: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2191333364839819432} - serializedVersion: 4 - m_Mass: 1 - m_Drag: 0 - m_AngularDrag: 0.05 - m_CenterOfMass: {x: 0, y: 0, z: 0} - m_InertiaTensor: {x: 1, y: 1, z: 1} - m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1} - m_IncludeLayers: - serializedVersion: 2 - m_Bits: 0 - m_ExcludeLayers: - serializedVersion: 2 - m_Bits: 0 - m_ImplicitCom: 1 - m_ImplicitTensor: 1 - m_UseGravity: 1 - m_IsKinematic: 0 - m_Interpolate: 0 - m_Constraints: 0 - m_CollisionDetection: 0 --- !u!65 &8785614081330407045 BoxCollider: m_ObjectHideFlags: 0 @@ -149,19 +121,6 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: isActive: 1 ---- !u!114 &7681678543859060545 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2191333364839819432} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 06015834a0da4561ba47d104b73171a4, type: 3} - m_Name: - m_EditorClassIdentifier: - isActive: 1 --- !u!114 &-7803032184951374842 MonoBehaviour: m_ObjectHideFlags: 0 @@ -180,3 +139,15 @@ MonoBehaviour: m_Bits: 4294967295 plateSize: {x: 1.2, y: 0.4, z: 1.2} plateOffset: {x: 0, y: 0.5, z: 0} +--- !u!114 &4542395966412092557 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2191333364839819432} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 7986c88b8e1d4944832af56e23188597, type: 3} + m_Name: + m_EditorClassIdentifier: diff --git a/Assets/Scenes/Test.unity b/Assets/Scenes/Test.unity index cdbdaf4..4252e5c 100644 --- a/Assets/Scenes/Test.unity +++ b/Assets/Scenes/Test.unity @@ -1083,6 +1083,74 @@ Transform: m_Children: [] m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1001 &2032802597 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 77361986880837193, guid: b3e24e2df98d14e4ebc08cc68c071afa, + type: 3} + propertyPath: m_LocalPosition.x + value: 15 + objectReference: {fileID: 0} + - target: {fileID: 77361986880837193, guid: b3e24e2df98d14e4ebc08cc68c071afa, + type: 3} + propertyPath: m_LocalPosition.y + value: 1.5 + objectReference: {fileID: 0} + - target: {fileID: 77361986880837193, guid: b3e24e2df98d14e4ebc08cc68c071afa, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 77361986880837193, guid: b3e24e2df98d14e4ebc08cc68c071afa, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 77361986880837193, guid: b3e24e2df98d14e4ebc08cc68c071afa, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 77361986880837193, guid: b3e24e2df98d14e4ebc08cc68c071afa, + type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 77361986880837193, guid: b3e24e2df98d14e4ebc08cc68c071afa, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 77361986880837193, guid: b3e24e2df98d14e4ebc08cc68c071afa, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 77361986880837193, guid: b3e24e2df98d14e4ebc08cc68c071afa, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 77361986880837193, guid: b3e24e2df98d14e4ebc08cc68c071afa, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2729643726423589850, guid: b3e24e2df98d14e4ebc08cc68c071afa, + type: 3} + propertyPath: m_Name + value: Door (4) + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: b3e24e2df98d14e4ebc08cc68c071afa, type: 3} --- !u!1001 &366996911271636373 PrefabInstance: m_ObjectHideFlags: 0 @@ -1287,6 +1355,74 @@ PrefabInstance: m_AddedGameObjects: [] m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: b3e24e2df98d14e4ebc08cc68c071afa, type: 3} +--- !u!1001 &3372472533242412945 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1079693037897703353, guid: 17ad2833fef1bc044bcc25a227730d74, + type: 3} + propertyPath: m_Name + value: NumberSlot + objectReference: {fileID: 0} + - target: {fileID: 3692176305921728328, guid: 17ad2833fef1bc044bcc25a227730d74, + type: 3} + propertyPath: m_LocalPosition.x + value: 15 + objectReference: {fileID: 0} + - target: {fileID: 3692176305921728328, guid: 17ad2833fef1bc044bcc25a227730d74, + type: 3} + propertyPath: m_LocalPosition.y + value: 1.5 + objectReference: {fileID: 0} + - target: {fileID: 3692176305921728328, guid: 17ad2833fef1bc044bcc25a227730d74, + type: 3} + propertyPath: m_LocalPosition.z + value: -5 + objectReference: {fileID: 0} + - target: {fileID: 3692176305921728328, guid: 17ad2833fef1bc044bcc25a227730d74, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 3692176305921728328, guid: 17ad2833fef1bc044bcc25a227730d74, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3692176305921728328, guid: 17ad2833fef1bc044bcc25a227730d74, + type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3692176305921728328, guid: 17ad2833fef1bc044bcc25a227730d74, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3692176305921728328, guid: 17ad2833fef1bc044bcc25a227730d74, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3692176305921728328, guid: 17ad2833fef1bc044bcc25a227730d74, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3692176305921728328, guid: 17ad2833fef1bc044bcc25a227730d74, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 17ad2833fef1bc044bcc25a227730d74, type: 3} --- !u!1001 &6191742170513974480 PrefabInstance: m_ObjectHideFlags: 0 @@ -1591,6 +1727,7 @@ SceneRoots: - {fileID: 1751629950} - {fileID: 1948851238} - {fileID: 993640446} + - {fileID: 2032802597} - {fileID: 1781028406820323425} - {fileID: 366996911271636373} - {fileID: 6191742170513974480} @@ -1598,3 +1735,4 @@ SceneRoots: - {fileID: 473911345} - {fileID: 865274353} - {fileID: 6350903300567888677} + - {fileID: 3372472533242412945} diff --git a/Assets/Script/Gameplay/Facility/NumberSlotController.cs b/Assets/Script/Gameplay/Facility/NumberSlotController.cs new file mode 100644 index 0000000..cc9df89 --- /dev/null +++ b/Assets/Script/Gameplay/Facility/NumberSlotController.cs @@ -0,0 +1,76 @@ +using System.Collections.Generic; +using UnityEngine; +using Script.Gameplay.Connect; + +namespace Script.Gameplay.Facility +{ + // 号码枚举类型 + public enum NumberType + { + Zero, + One, + Two, + Three, + Four, + Five, + // Six, + // Seven, + // Eight, + // Nine + } + + // 号码槽 + public class NumberSlotController : MonoBehaviour, IConnectable, ISignalSender + { + [Header("号码槽设置")] + [SerializeField] private NumberType currentNumber = NumberType.Zero; + [SerializeField] private NumberType correctNumber = NumberType.One; + + public List ConnectionLines { get; set; } = new List(); + + // 不可编辑,不可交互 + // 可连接,可发信号 + + public void OnGazeEnter() { } + public void OnGazeExit() { } + public Vector3 GetPosition() => transform.position; + public GameObject GetGameObject() => gameObject; + public string GetConnectableName() => gameObject.name; + + // 接收信号 + public void SignalActive(bool active, GameObject sender) + { + if (active) + { + SwitchToNextNumber(); + } + } + + // 切换到下一个号码 + private void SwitchToNextNumber() + { + currentNumber = (NumberType)(((int)currentNumber + 1) % System.Enum.GetValues(typeof(NumberType)).Length); + CheckNumberAndSendSignal(); + } + + // 检查号码并发信号 + private void CheckNumberAndSendSignal() + { + bool isCorrect = currentNumber == correctNumber; + SendSignal(isCorrect); + } + + // 发出信号 + public void SendSignal(bool active) + { + if (ConnectionLines != null) + { + foreach (var line in ConnectionLines) + { + line.SignalActive(active, this.gameObject); + } + } + } + } +} + diff --git a/Assets/Script/Gameplay/Facility/NumberSlotController.cs.meta b/Assets/Script/Gameplay/Facility/NumberSlotController.cs.meta new file mode 100644 index 0000000..8765a47 --- /dev/null +++ b/Assets/Script/Gameplay/Facility/NumberSlotController.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 301178d89b6b43e0844e3d39aa579442 +timeCreated: 1760961220 \ No newline at end of file