diff --git a/Assets/Prefab/Gameplay/Lever.prefab b/Assets/Prefab/Gameplay/Lever.prefab new file mode 100644 index 0000000..d8002f3 --- /dev/null +++ b/Assets/Prefab/Gameplay/Lever.prefab @@ -0,0 +1,149 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &6227019518059310355 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2356242250385391551} + - component: {fileID: 4763900636075465414} + - component: {fileID: 6839980979269427984} + - component: {fileID: 6900514999789347776} + - component: {fileID: 5480938290288266788} + - component: {fileID: 3969518804808817043} + - component: {fileID: 4936355834716623489} + m_Layer: 0 + m_Name: Lever + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2356242250385391551 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6227019518059310355} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 10, y: 1, z: -5} + m_LocalScale: {x: 0.3, y: 0.8, z: 0.15} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &4763900636075465414 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6227019518059310355} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &6839980979269427984 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6227019518059310355} + 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 &6900514999789347776 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6227019518059310355} + 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 &5480938290288266788 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6227019518059310355} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 7986c88b8e1d4944832af56e23188597, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &3969518804808817043 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6227019518059310355} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2791e039b8344f45ad6dc86f5188d82d, type: 3} + m_Name: + m_EditorClassIdentifier: + isActive: 1 +--- !u!114 &4936355834716623489 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6227019518059310355} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6b9b9a895b0d40edb9a6d7213afbb256, type: 3} + m_Name: + m_EditorClassIdentifier: + Interactable: 1 + isActive: 1 diff --git a/Assets/Prefab/Gameplay/Lever.prefab.meta b/Assets/Prefab/Gameplay/Lever.prefab.meta new file mode 100644 index 0000000..0e07694 --- /dev/null +++ b/Assets/Prefab/Gameplay/Lever.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: be07db3098b709a40a6965f50f8c9640 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scenes/Test.unity b/Assets/Scenes/Test.unity index 43cb32f..8bc511e 100644 --- a/Assets/Scenes/Test.unity +++ b/Assets/Scenes/Test.unity @@ -378,6 +378,74 @@ PrefabInstance: m_AddedGameObjects: [] m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 9e2e93bf07726014bac5a458c32e697f, type: 3} +--- !u!1001 &993640446 +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: 10 + 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 (2) + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: b3e24e2df98d14e4ebc08cc68c071afa, type: 3} --- !u!1 &1274249800 GameObject: m_ObjectHideFlags: 0 @@ -991,6 +1059,74 @@ PrefabInstance: m_AddedGameObjects: [] m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: ddd89e93db279184daa80d86bd4e770f, type: 3} +--- !u!1001 &6350903300567888677 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 2356242250385391551, guid: be07db3098b709a40a6965f50f8c9640, + type: 3} + propertyPath: m_LocalPosition.x + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 2356242250385391551, guid: be07db3098b709a40a6965f50f8c9640, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.8 + objectReference: {fileID: 0} + - target: {fileID: 2356242250385391551, guid: be07db3098b709a40a6965f50f8c9640, + type: 3} + propertyPath: m_LocalPosition.z + value: -5 + objectReference: {fileID: 0} + - target: {fileID: 2356242250385391551, guid: be07db3098b709a40a6965f50f8c9640, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 2356242250385391551, guid: be07db3098b709a40a6965f50f8c9640, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2356242250385391551, guid: be07db3098b709a40a6965f50f8c9640, + type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2356242250385391551, guid: be07db3098b709a40a6965f50f8c9640, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2356242250385391551, guid: be07db3098b709a40a6965f50f8c9640, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2356242250385391551, guid: be07db3098b709a40a6965f50f8c9640, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2356242250385391551, guid: be07db3098b709a40a6965f50f8c9640, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6227019518059310355, guid: be07db3098b709a40a6965f50f8c9640, + type: 3} + propertyPath: m_Name + value: Lever + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: be07db3098b709a40a6965f50f8c9640, type: 3} --- !u!1001 &7020889523296792185 PrefabInstance: m_ObjectHideFlags: 0 @@ -1142,6 +1278,8 @@ SceneRoots: - {fileID: 2021089518} - {fileID: 2088331975902746738} - {fileID: 1948851238} + - {fileID: 993640446} - {fileID: 1781028406820323425} - {fileID: 366996911271636373} - {fileID: 6191742170513974480} + - {fileID: 6350903300567888677} diff --git a/Assets/Script/Gameplay/Facility/LeverInteractController.cs b/Assets/Script/Gameplay/Facility/LeverInteractController.cs new file mode 100644 index 0000000..e3ef810 --- /dev/null +++ b/Assets/Script/Gameplay/Facility/LeverInteractController.cs @@ -0,0 +1,86 @@ +using UnityEngine; +using Script.Gameplay.Interface; +using Script.Gameplay.Connect; + +namespace Script.Gameplay.Facility +{ + public class LeverInteractController : MonoBehaviour, IInteractable, IEditableComponent, IConnectable + { + #region Interactable + + public bool Interactable = true; + private bool isPulled = false; + + public string GetInteractPrompt() + { + return "按F拉动拉杆"; + } + + public void Interact(GameObject interactor) + { + if (!Interactable) return; + isPulled = !isPulled; + SendSignal(isPulled, interactor); + // 可选:拉杆动画 + Debug.Log(isPulled ? "Lever pulled down" : "Lever reset"); + } + + public void OnGazeEnter(GameObject editor) + { + // 可选:高亮拉杆 + } + + public void OnGazeExit(GameObject editor) + { + // 可选:取消高亮 + } + + #endregion + + #region EditableComponent + + [SerializeField] private bool isActive = true; + + public bool IsActive + { + get => isActive; + set + { + isActive = value; + Interactable = isActive; + } + } + + public string ComponentName { get; set; } = "Lever"; + public LockLevel LockLevel => LockLevel.Red; + + #endregion + + #region Connectable + + public void OnGazeEnter() { } + public void OnGazeExit() { } + public Vector3 GetPosition() => transform.position; + public string GetConnectableName() => gameObject.name; + public ConnectionLine OutputConnectionLine { get; set; } + public ConnectionLine InputConnectionLine { get; set; } + public bool IsConnectedOutput { get; set; } + public bool IsConnectedInput { get; set; } + + public void ReceiveSignal(bool active, GameObject sender) + { + // 拉杆通常不响应输入信号 + } + + public void SendSignal(bool active, GameObject sender) + { + if (OutputConnectionLine != null) + { + OutputConnectionLine.ReceiveSignal(active); + } + } + + #endregion + } +} + diff --git a/Assets/Script/Gameplay/Facility/LeverInteractController.cs.meta b/Assets/Script/Gameplay/Facility/LeverInteractController.cs.meta new file mode 100644 index 0000000..1a1ce0c --- /dev/null +++ b/Assets/Script/Gameplay/Facility/LeverInteractController.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 6b9b9a895b0d40edb9a6d7213afbb256 +timeCreated: 1760925436 \ No newline at end of file