diff --git a/Assets/InputSystem_Actions.cs b/Assets/InputSystem_Actions.cs index 5ca2522..d398441 100644 --- a/Assets/InputSystem_Actions.cs +++ b/Assets/InputSystem_Actions.cs @@ -116,14 +116,14 @@ public partial class @PlayerInputActions: IInputActionCollection2, IDisposable ""id"": ""852140f2-7766-474d-8707-702459ba45f3"", ""expectedControlType"": """", ""processors"": """", - ""interactions"": ""Hold"", + ""interactions"": """", ""initialStateCheck"": false }, { ""name"": ""Crouch"", ""type"": ""Button"", ""id"": ""27c5f898-bc57-4ee1-8800-db469aca5fe3"", - ""expectedControlType"": ""Button"", + ""expectedControlType"": """", ""processors"": """", ""interactions"": """", ""initialStateCheck"": false diff --git a/Assets/InputSystem_Actions.inputactions b/Assets/InputSystem_Actions.inputactions index 6862970..2484184 100644 --- a/Assets/InputSystem_Actions.inputactions +++ b/Assets/InputSystem_Actions.inputactions @@ -30,14 +30,14 @@ "id": "852140f2-7766-474d-8707-702459ba45f3", "expectedControlType": "", "processors": "", - "interactions": "Hold", + "interactions": "", "initialStateCheck": false }, { "name": "Crouch", "type": "Button", "id": "27c5f898-bc57-4ee1-8800-db469aca5fe3", - "expectedControlType": "Button", + "expectedControlType": "", "processors": "", "interactions": "", "initialStateCheck": false diff --git a/Assets/Prefabs/Tunnel.prefab b/Assets/Prefabs/Tunnel.prefab new file mode 100644 index 0000000..8b166ef --- /dev/null +++ b/Assets/Prefabs/Tunnel.prefab @@ -0,0 +1,261 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &5334341810660213834 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5524516627708568918} + - component: {fileID: 8060172296368980519} + - component: {fileID: 3945124241373782966} + m_Layer: 10 + m_Name: TunnelNodeB + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5524516627708568918 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5334341810660213834} + 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: 7892781535212668078} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &8060172296368980519 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5334341810660213834} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 275306f282948c343bf20ee884ad22b8, type: 3} + m_Name: + m_EditorClassIdentifier: Assembly-CSharp::TunnelNode + connectedNode: {fileID: 0} + otherEndOfThisSegment: {fileID: 2320767985316498782} + detectionRadius: 0.5 + tunnelLayer: + serializedVersion: 2 + m_Bits: 1024 +--- !u!65 &3945124241373782966 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5334341810660213834} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 1 + 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!1 &5462246585413302240 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4703568612144557396} + - component: {fileID: 2320767985316498782} + - component: {fileID: 2292926820231089492} + m_Layer: 10 + m_Name: TunnelNodeA + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4703568612144557396 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5462246585413302240} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -3, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 7892781535212668078} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &2320767985316498782 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5462246585413302240} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 275306f282948c343bf20ee884ad22b8, type: 3} + m_Name: + m_EditorClassIdentifier: Assembly-CSharp::TunnelNode + connectedNode: {fileID: 0} + otherEndOfThisSegment: {fileID: 8060172296368980519} + detectionRadius: 0.5 + tunnelLayer: + serializedVersion: 2 + m_Bits: 1024 +--- !u!65 &2292926820231089492 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5462246585413302240} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 1 + 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!1 &7817822323996939414 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7892781535212668078} + - component: {fileID: 1090720987273437667} + - component: {fileID: 2921653441481381272} + - component: {fileID: 5176949106980054761} + m_Layer: 0 + m_Name: Tunnel + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7892781535212668078 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7817822323996939414} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0.5, z: 0} + m_LocalScale: {x: 1, y: 2, z: 2} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 4703568612144557396} + - {fileID: 5524516627708568918} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &1090720987273437667 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7817822323996939414} + m_Mesh: {fileID: 4300000, guid: 791bea6128e52074ab5677f405e2d4d0, type: 3} +--- !u!23 &2921653441481381272 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7817822323996939414} + 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_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 25af05085d2957e42ac6b80b69ddd26a, 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_GlobalIlluminationMeshLod: 0 + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_MaskInteraction: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!64 &5176949106980054761 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7817822323996939414} + 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: 5 + m_Convex: 1 + m_CookingOptions: 30 + m_Mesh: {fileID: 4300000, guid: 791bea6128e52074ab5677f405e2d4d0, type: 3} diff --git a/Assets/Scenes/DefenceScene.unity b/Assets/Scenes/DefenceScene.unity index a3565a1..e0b1395 100644 --- a/Assets/Scenes/DefenceScene.unity +++ b/Assets/Scenes/DefenceScene.unity @@ -677,6 +677,152 @@ MonoBehaviour: m_MinRegionArea: 2 m_NavMeshData: {fileID: 23800000, guid: 2d822e23a760f3943a3174a0d27b4254, type: 2} m_BuildHeightMesh: 0 +--- !u!1 &342345820 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 342345821} + - component: {fileID: 342345825} + - component: {fileID: 342345824} + - component: {fileID: 342345823} + - component: {fileID: 342345822} + m_Layer: 7 + m_Name: DungeonBase + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!4 &342345821 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 342345820} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -9, y: -8, z: 0} + m_LocalScale: {x: 10, y: 2, z: 6} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 743367988} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &342345822 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 342345820} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 7a5ac11cc976e418e8d13136b07e1f52, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.AI.Navigation::Unity.AI.Navigation.NavMeshSurface + m_SerializedVersion: 0 + m_AgentTypeID: 0 + m_CollectObjects: 0 + m_Size: {x: 10, y: 10, z: 10} + m_Center: {x: 0, y: 2, z: 0} + m_LayerMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_UseGeometry: 0 + m_DefaultArea: 0 + m_GenerateLinks: 0 + m_IgnoreNavMeshAgent: 1 + m_IgnoreNavMeshObstacle: 1 + m_OverrideTileSize: 0 + m_TileSize: 256 + m_OverrideVoxelSize: 0 + m_VoxelSize: 0.016666668 + m_MinRegionArea: 2 + m_NavMeshData: {fileID: 0} + m_BuildHeightMesh: 0 +--- !u!64 &342345823 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 342345820} + 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: 5 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &342345824 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 342345820} + 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_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: a3cd22eceea5e8548b10cdb5d9b49a25, 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_GlobalIlluminationMeshLod: 0 + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_MaskInteraction: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &342345825 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 342345820} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} --- !u!4 &372588680 stripped Transform: m_CorrespondingSourceObject: {fileID: 6438027004378685690, guid: 2bb7e098e271eb44a873c856dbf59c7c, type: 3} @@ -801,11 +947,11 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 2338240775821095493, guid: 1955bdf7dd2940f44aa117fbcf6eb626, type: 3} propertyPath: m_LocalPosition.x - value: -8 + value: -7 objectReference: {fileID: 0} - target: {fileID: 2338240775821095493, guid: 1955bdf7dd2940f44aa117fbcf6eb626, type: 3} propertyPath: m_LocalPosition.y - value: 0.5 + value: 0.1 objectReference: {fileID: 0} - target: {fileID: 2338240775821095493, guid: 1955bdf7dd2940f44aa117fbcf6eb626, type: 3} propertyPath: m_LocalPosition.z @@ -1114,6 +1260,63 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 599851509} m_CullTransparentMesh: 1 +--- !u!1001 &613577505 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 7817822323996939414, guid: 48bf40d31e903d34f9469451d7de06dd, type: 3} + propertyPath: m_Name + value: Tunnel + objectReference: {fileID: 0} + - target: {fileID: 7892781535212668078, guid: 48bf40d31e903d34f9469451d7de06dd, type: 3} + propertyPath: m_LocalPosition.x + value: -9 + objectReference: {fileID: 0} + - target: {fileID: 7892781535212668078, guid: 48bf40d31e903d34f9469451d7de06dd, type: 3} + propertyPath: m_LocalPosition.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 7892781535212668078, guid: 48bf40d31e903d34f9469451d7de06dd, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7892781535212668078, guid: 48bf40d31e903d34f9469451d7de06dd, type: 3} + propertyPath: m_LocalRotation.w + value: 0.7071068 + objectReference: {fileID: 0} + - target: {fileID: 7892781535212668078, guid: 48bf40d31e903d34f9469451d7de06dd, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7892781535212668078, guid: 48bf40d31e903d34f9469451d7de06dd, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7892781535212668078, guid: 48bf40d31e903d34f9469451d7de06dd, type: 3} + propertyPath: m_LocalRotation.z + value: 0.7071068 + objectReference: {fileID: 0} + - target: {fileID: 7892781535212668078, guid: 48bf40d31e903d34f9469451d7de06dd, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7892781535212668078, guid: 48bf40d31e903d34f9469451d7de06dd, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7892781535212668078, guid: 48bf40d31e903d34f9469451d7de06dd, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 90 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 48bf40d31e903d34f9469451d7de06dd, type: 3} --- !u!1 &621471626 GameObject: m_ObjectHideFlags: 0 @@ -1129,6 +1332,8 @@ GameObject: - component: {fileID: 621471631} - component: {fileID: 621471635} - component: {fileID: 621471634} + - component: {fileID: 621471636} + - component: {fileID: 621471637} m_Layer: 9 m_Name: Player m_TagString: Player @@ -1145,7 +1350,7 @@ Transform: m_GameObject: {fileID: 621471626} serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 5, z: 0} + m_LocalPosition: {x: -8, y: 3, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] @@ -1259,6 +1464,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: Assembly-CSharp::PlayerMovement moveSpeed: 5 + jumpHeight: 1.5 gravity: -19.62 --- !u!143 &621471635 CharacterController: @@ -1285,6 +1491,39 @@ CharacterController: m_SkinWidth: 0.08 m_MinMoveDistance: 0.001 m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &621471636 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 621471626} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 736c03e837e6b074ba7f90b813050aed, type: 3} + m_Name: + m_EditorClassIdentifier: Assembly-CSharp::PlayerInteractionController + range: 1 + interactableLayer: + serializedVersion: 2 + m_Bits: 1024 + constructionLayer: + serializedVersion: 2 + m_Bits: 256 + buildSpeedMultiplier: 2 +--- !u!114 &621471637 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 621471626} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d71ce06d133743140877345b807f33ad, type: 3} + m_Name: + m_EditorClassIdentifier: Assembly-CSharp::TunnelTraveler + travelSpeed: 5 --- !u!1 &670724421 GameObject: m_ObjectHideFlags: 0 @@ -1461,6 +1700,7 @@ Transform: m_ConstrainProportionsScale: 0 m_Children: - {fileID: 290482132} + - {fileID: 342345821} - {fileID: 445606026} - {fileID: 372588680} - {fileID: 2084947170} @@ -1601,7 +1841,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 1524868319650946676, guid: 443aa97110814434cb36b26656f1884c, type: 3} propertyPath: m_LocalPosition.x - value: -11 + value: -12 objectReference: {fileID: 0} - target: {fileID: 1524868319650946676, guid: 443aa97110814434cb36b26656f1884c, type: 3} propertyPath: m_LocalPosition.y @@ -1962,11 +2202,11 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 2338240775821095493, guid: 1955bdf7dd2940f44aa117fbcf6eb626, type: 3} propertyPath: m_LocalPosition.x - value: -3 + value: -4 objectReference: {fileID: 0} - target: {fileID: 2338240775821095493, guid: 1955bdf7dd2940f44aa117fbcf6eb626, type: 3} propertyPath: m_LocalPosition.y - value: 0.5 + value: 0.1 objectReference: {fileID: 0} - target: {fileID: 2338240775821095493, guid: 1955bdf7dd2940f44aa117fbcf6eb626, type: 3} propertyPath: m_LocalPosition.z @@ -2779,6 +3019,63 @@ Transform: m_CorrespondingSourceObject: {fileID: 2338240775821095493, guid: 1955bdf7dd2940f44aa117fbcf6eb626, type: 3} m_PrefabInstance: {fileID: 497942047} m_PrefabAsset: {fileID: 0} +--- !u!1001 &2144751143 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 7817822323996939414, guid: 48bf40d31e903d34f9469451d7de06dd, type: 3} + propertyPath: m_Name + value: Tunnel (1) + objectReference: {fileID: 0} + - target: {fileID: 7892781535212668078, guid: 48bf40d31e903d34f9469451d7de06dd, type: 3} + propertyPath: m_LocalPosition.x + value: -9 + objectReference: {fileID: 0} + - target: {fileID: 7892781535212668078, guid: 48bf40d31e903d34f9469451d7de06dd, type: 3} + propertyPath: m_LocalPosition.y + value: -2.5 + objectReference: {fileID: 0} + - target: {fileID: 7892781535212668078, guid: 48bf40d31e903d34f9469451d7de06dd, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7892781535212668078, guid: 48bf40d31e903d34f9469451d7de06dd, type: 3} + propertyPath: m_LocalRotation.w + value: 0.7071068 + objectReference: {fileID: 0} + - target: {fileID: 7892781535212668078, guid: 48bf40d31e903d34f9469451d7de06dd, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7892781535212668078, guid: 48bf40d31e903d34f9469451d7de06dd, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7892781535212668078, guid: 48bf40d31e903d34f9469451d7de06dd, type: 3} + propertyPath: m_LocalRotation.z + value: 0.7071068 + objectReference: {fileID: 0} + - target: {fileID: 7892781535212668078, guid: 48bf40d31e903d34f9469451d7de06dd, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7892781535212668078, guid: 48bf40d31e903d34f9469451d7de06dd, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7892781535212668078, guid: 48bf40d31e903d34f9469451d7de06dd, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 90 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 48bf40d31e903d34f9469451d7de06dd, type: 3} --- !u!1001 &3690888448170635710 PrefabInstance: m_ObjectHideFlags: 0 @@ -2789,15 +3086,27 @@ PrefabInstance: m_Modifications: - target: {fileID: 1908074291664802429, guid: 2b08dd32e48ef5e4aa65a6122099152e, type: 3} propertyPath: m_LocalPosition.x - value: 3.53023 + value: -4.46977 objectReference: {fileID: 0} - target: {fileID: 1908074291664802429, guid: 2b08dd32e48ef5e4aa65a6122099152e, type: 3} propertyPath: m_LocalPosition.y - value: 18 + value: 6 objectReference: {fileID: 0} - target: {fileID: 1908074291664802429, guid: 2b08dd32e48ef5e4aa65a6122099152e, type: 3} propertyPath: m_LocalPosition.z - value: -4.59703 + value: -7.59703 + objectReference: {fileID: 0} + - target: {fileID: 1908074291664802429, guid: 2b08dd32e48ef5e4aa65a6122099152e, type: 3} + propertyPath: m_LocalRotation.w + value: 0.9659258 + objectReference: {fileID: 0} + - target: {fileID: 1908074291664802429, guid: 2b08dd32e48ef5e4aa65a6122099152e, type: 3} + propertyPath: m_LocalRotation.x + value: 0.2588191 + objectReference: {fileID: 0} + - target: {fileID: 1908074291664802429, guid: 2b08dd32e48ef5e4aa65a6122099152e, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 30 objectReference: {fileID: 0} - target: {fileID: 2106659674514999703, guid: 2b08dd32e48ef5e4aa65a6122099152e, type: 3} propertyPath: m_LocalPosition.x @@ -2849,15 +3158,31 @@ PrefabInstance: objectReference: {fileID: 621471627} - target: {fileID: 4415413950589506134, guid: 2b08dd32e48ef5e4aa65a6122099152e, type: 3} propertyPath: m_LocalPosition.x - value: 3.53023 + value: -4.46977 objectReference: {fileID: 0} - target: {fileID: 4415413950589506134, guid: 2b08dd32e48ef5e4aa65a6122099152e, type: 3} propertyPath: m_LocalPosition.y - value: 18 + value: 6 objectReference: {fileID: 0} - target: {fileID: 4415413950589506134, guid: 2b08dd32e48ef5e4aa65a6122099152e, type: 3} propertyPath: m_LocalPosition.z - value: -4.59703 + value: -7.59703 + objectReference: {fileID: 0} + - target: {fileID: 4415413950589506134, guid: 2b08dd32e48ef5e4aa65a6122099152e, type: 3} + propertyPath: m_LocalRotation.w + value: 0.9659258 + objectReference: {fileID: 0} + - target: {fileID: 4415413950589506134, guid: 2b08dd32e48ef5e4aa65a6122099152e, type: 3} + propertyPath: m_LocalRotation.x + value: 0.2588191 + objectReference: {fileID: 0} + - target: {fileID: 5356928211000044894, guid: 2b08dd32e48ef5e4aa65a6122099152e, type: 3} + propertyPath: FollowOffset.y + value: 3 + objectReference: {fileID: 0} + - target: {fileID: 5356928211000044894, guid: 2b08dd32e48ef5e4aa65a6122099152e, type: 3} + propertyPath: FollowOffset.z + value: -8 objectReference: {fileID: 0} m_RemovedComponents: [] m_RemovedGameObjects: [] @@ -2874,3 +3199,5 @@ SceneRoots: - {fileID: 621471627} - {fileID: 1409253547} - {fileID: 14847856} + - {fileID: 613577505} + - {fileID: 2144751143} diff --git a/Assets/Scripts/GameBase/BuildManager.cs b/Assets/Scripts/GameBase/BuildManager.cs index e60e495..0d8cee8 100644 --- a/Assets/Scripts/GameBase/BuildManager.cs +++ b/Assets/Scripts/GameBase/BuildManager.cs @@ -17,6 +17,8 @@ public class BuildManager : MonoBehaviour public Vector2Int size; // 점유 칸수 } + public bool IsBuildMode => isBuildMode; + [Header("Settings")] [SerializeField] private float cellSize = 1f; [SerializeField] private LayerMask groundLayer; diff --git a/Assets/Scripts/IInteractable.cs b/Assets/Scripts/IInteractable.cs new file mode 100644 index 0000000..60573de --- /dev/null +++ b/Assets/Scripts/IInteractable.cs @@ -0,0 +1,10 @@ +using UnityEngine; + +public interface IInteractable +{ + // 누가 상호작용을 시도했는지 알려주기 위해 GameObject를 인자로 받습니다. + void Interact(GameObject user); + + // 선택 사항: 화면에 띄울 메시지를 반환하는 기능 (예: "통로 이용하기 [E]") + string GetInteractionText(); +} \ No newline at end of file diff --git a/Assets/Scripts/Player/PlayerInteraction.cs b/Assets/Scripts/Player/PlayerInteraction.cs new file mode 100644 index 0000000..44d55f9 --- /dev/null +++ b/Assets/Scripts/Player/PlayerInteraction.cs @@ -0,0 +1,79 @@ +using UnityEngine; +using UnityEngine.InputSystem; // New Input System 네임스페이스 + +public class PlayerInteraction : MonoBehaviour +{ + [Header("Detection Settings")] + [SerializeField] private float interactionRadius = 2.5f; + [SerializeField] private LayerMask interactableLayer; + + private PlayerInputActions _inputActions; + + void Awake() + { + _inputActions = new PlayerInputActions(); + } + + void OnEnable() + { + // Interact 액션이 수행되었을 때(버튼을 눌렀을 때) 실행될 함수 연결 + _inputActions.Player.Interact.performed += OnInteractPerformed; + _inputActions.Enable(); + } + + void OnDisable() + { + // 이벤트 연결 해제 및 비활성화 + _inputActions.Player.Interact.performed -= OnInteractPerformed; + _inputActions.Disable(); + } + + // Input Action 콜백 함수 + private void OnInteractPerformed(InputAction.CallbackContext context) + { + Debug.Log("E 키 눌림!"); // <-- 이게 콘솔에 찍히나요? + + // 건설 모드 중일 때는 상호작용을 막고 싶다면 아래 조건 추가 + if (BuildManager.Instance.IsBuildMode) return; + + CheckAndInteract(); + } + + private void CheckAndInteract() + { + Collider[] colliders = Physics.OverlapSphere(transform.position, interactionRadius, interactableLayer); + Debug.Log($"주변에서 {colliders.Length}개의 물체 감지됨"); // 0이 나오면 레이어나 콜라이더 문제 + + IInteractable nearestInteractable = null; + float minDistance = Mathf.Infinity; + + foreach (var col in colliders) + { + // 부모까지 포함하여 IInteractable 인터페이스를 찾음 + IInteractable interactable = col.GetComponentInParent(); + + if (interactable != null) + { + Debug.Log($"{col.name}에서 인터페이스 발견!"); + float distance = Vector3.Distance(transform.position, col.transform.position); + if (distance < minDistance) + { + minDistance = distance; + nearestInteractable = interactable; + } + } + } + + if (nearestInteractable != null) + { + nearestInteractable.Interact(gameObject); + Debug.Log($"[Interaction] {nearestInteractable.GetInteractionText()} 실행"); + } + } + + private void OnDrawGizmosSelected() + { + Gizmos.color = Color.yellow; + Gizmos.DrawWireSphere(transform.position, interactionRadius); + } +} \ No newline at end of file diff --git a/Assets/Scripts/Player/PlayerInteractionController.cs b/Assets/Scripts/Player/PlayerInteractionController.cs new file mode 100644 index 0000000..e27b149 --- /dev/null +++ b/Assets/Scripts/Player/PlayerInteractionController.cs @@ -0,0 +1,91 @@ +using UnityEngine; +using UnityEngine.InputSystem; + +public class PlayerInteractionController : MonoBehaviour +{ + [Header("Detection Settings")] + [SerializeField] private float range = 3f; + [SerializeField] private LayerMask interactableLayer; // Tunnel용 레이어 + [SerializeField] private LayerMask constructionLayer; // 건설 토대용 레이어 + + [Header("Build Settings")] + [SerializeField] private float buildSpeedMultiplier = 2f; + + private PlayerInputActions _inputActions; + private bool _isHoldingInteract = false; + + void Awake() + { + _inputActions = new PlayerInputActions(); + + // 탭(짧게 누르기) 시점 체크 + _inputActions.Player.Interact.performed += OnInteractTap; + + // 홀드(꾹 누르기) 시작/종료 체크 + _inputActions.Player.Interact.started += ctx => { + _isHoldingInteract = true; + Debug.Log("인터랙션 버튼 누르기 시작 (건설 가속 준비)"); + }; + _inputActions.Player.Interact.canceled += ctx => { + _isHoldingInteract = false; + Debug.Log("인터랙션 버튼 뗌"); + }; + } + + void OnEnable() => _inputActions.Enable(); + void OnDisable() => _inputActions.Disable(); + + void Update() + { + if (_isHoldingInteract) + { + PerformConstructionSupport(); + } + } + + private void OnInteractTap(InputAction.CallbackContext context) + { + Debug.Log("E 키 탭 감지! 주변 탐색 시작..."); + + // 1. 주변 모든 콜라이더 가져오기 (레이어 마스크 없이 먼저 테스트해보고 싶다면 0 대신 ~0 입력) + Collider[] colliders = Physics.OverlapSphere(transform.position, range, interactableLayer); + + Debug.Log($"주변 {interactableLayer.value} 레이어에서 {colliders.Length}개의 오브젝트 감지됨"); + + foreach (var col in colliders) + { + // 2. 인터페이스 찾기 (본인 또는 부모에게서) + IInteractable interactable = col.GetComponentInParent(); + if (interactable != null) + { + Debug.Log($"[성공] {col.name}에서 IInteractable 발견! 터널 진입합니다."); + interactable.Interact(gameObject); + _isHoldingInteract = false; // 이동 중에는 건설 지원 중단 + return; + } + else + { + Debug.Log($"[실패] {col.name} 감지되었으나 IInteractable 스크립트가 없음"); + } + } + } + + private void PerformConstructionSupport() + { + Collider[] targets = Physics.OverlapSphere(transform.position, range, constructionLayer); + foreach (var col in targets) + { + ConstructionSite site = col.GetComponent(); + if (site != null) + { + site.AdvanceConstruction(Time.deltaTime * buildSpeedMultiplier); + } + } + } + + void OnDrawGizmosSelected() + { + Gizmos.color = Color.yellow; + Gizmos.DrawWireSphere(transform.position, range); + } +} \ No newline at end of file diff --git a/Assets/Scripts/Player/PlayerMovement.cs b/Assets/Scripts/Player/PlayerMovement.cs index 6fbc823..5dec36d 100644 --- a/Assets/Scripts/Player/PlayerMovement.cs +++ b/Assets/Scripts/Player/PlayerMovement.cs @@ -3,22 +3,25 @@ using UnityEngine.InputSystem; public class PlayerMovement : MonoBehaviour { - [SerializeField] private float moveSpeed = 5f; - private Vector2 _moveInput; + [Header("Movement Settings")] + public float moveSpeed = 5f; + public float jumpHeight = 1.5f; // 점프 높이 + public float gravity = -19.62f; // 기본 중력보다 약간 무거운 값 추천 + private CharacterController _controller; private PlayerInputActions _inputActions; - private Vector3 _velocity; - public float gravity = -19.62f; // 조금 더 묵직하게 설정 + private Vector2 _moveInput; + private Vector3 _velocity; // 수직 속도 (중력용) + private bool _isGrounded; void Awake() { _controller = GetComponent(); _inputActions = new PlayerInputActions(); - // Move 액션 연결 (Vector2 타입으로 설정되어 있어야 함) - _inputActions.Player.Move.performed += ctx => _moveInput = ctx.ReadValue(); - _inputActions.Player.Move.canceled += ctx => _moveInput = Vector2.zero; + // 점프 액션 연결 + _inputActions.Player.Jump.performed += ctx => OnJump(); } void OnEnable() => _inputActions.Enable(); @@ -26,29 +29,46 @@ public class PlayerMovement : MonoBehaviour void Update() { - // 1. 수직 속도(중력) 계산 - if (_controller.isGrounded && _velocity.y < 0) + // [해결책] 터널 이동 중이라면 일반 이동/중력 로직을 모두 중단합니다. + if (GetComponent().IsTraveling) { - // 바닥에 닿아있을 때 속도를 아주 작게 유지 (경사로 등에서 안정적) + return; + } + + // 1. 바닥 체크 (CharacterController의 기능 활용) + _isGrounded = _controller.isGrounded; + if (_isGrounded && _velocity.y < 0) + { + // 바닥에 닿아있을 때는 아주 작은 하방 힘만 유지 (안정성) _velocity.y = -2f; } - // 2. 입력받은 방향으로 평면 이동 계산 - Vector3 move = new Vector3(_moveInput.x, 0, _moveInput.y); + // 2. 이동 로직 + _moveInput = _inputActions.Player.Move.ReadValue(); + Vector3 move = transform.right * _moveInput.x + transform.forward * _moveInput.y; + _controller.Move(move * moveSpeed * Time.deltaTime); - // 수평 이동 실행 - _controller.Move(move * Time.deltaTime * moveSpeed); - - // 3. 중력 가속도 적용 (v = v + g * t) + // 3. 중력 적용 _velocity.y += gravity * Time.deltaTime; - // 4. 수직 이동(중력) 실행 (s = v * t) + // 4. 최종 수직 이동 적용 (중력/점프 속도) _controller.Move(_velocity * Time.deltaTime); + } - // 이동 중일 때 바라보는 방향 전환 - if (move != Vector3.zero) + private void OnJump() + { + // TunnelTraveler가 이동 중인지 체크 (상태 변수 활용) + if (GetComponent().IsTraveling) return; + + if (_isGrounded) { - transform.forward = move; + _velocity.y = Mathf.Sqrt(jumpHeight * -2f * gravity); } } + + // 터널 이동 등 외부에서 중력을 초기화해야 할 때 사용 + public void ResetVelocity() + { + _velocity.y = 0; + } } \ No newline at end of file diff --git a/Assets/Scripts/TunnelNode.cs b/Assets/Scripts/TunnelNode.cs new file mode 100644 index 0000000..fa4f11a --- /dev/null +++ b/Assets/Scripts/TunnelNode.cs @@ -0,0 +1,42 @@ +using UnityEngine; + +public class TunnelNode : MonoBehaviour, IInteractable +{ + public TunnelNode connectedNode; + public TunnelNode otherEndOfThisSegment; + public float detectionRadius = 0.5f; + public LayerMask tunnelLayer; + + // --- IInteractable 구현부 --- + public void Interact(GameObject user) + { + // 상호작용한 플레이어의 TunnelTraveler를 찾아 이동 시작! + TunnelTraveler traveler = user.GetComponent(); + if (traveler != null) + { + traveler.StartTravel(this); + } + } + + public string GetInteractionText() + { + return "통로 진입"; + } + // ---------------------------- + + void Start() => FindNeighborNode(); + + public void FindNeighborNode() + { + Collider[] colliders = Physics.OverlapSphere(transform.position, detectionRadius, tunnelLayer); + foreach (var col in colliders) + { + TunnelNode neighbor = col.GetComponent(); + if (neighbor != null && neighbor != this && neighbor != otherEndOfThisSegment) + { + connectedNode = neighbor; + break; + } + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/TunnelTraveler.cs b/Assets/Scripts/TunnelTraveler.cs new file mode 100644 index 0000000..f28e3ee --- /dev/null +++ b/Assets/Scripts/TunnelTraveler.cs @@ -0,0 +1,90 @@ +using UnityEngine; +using System.Collections; +using System.Collections.Generic; + +public class TunnelTraveler : MonoBehaviour +{ + public float travelSpeed = 25f; private bool _isTraveling = false; + // 외부에서 읽기 전용으로 접근할 수 있게 합니다. + public bool IsTraveling => _isTraveling; + + private CharacterController _controller; + private Rigidbody _rigidbody; + + void Awake() + { + _controller = GetComponent(); + _rigidbody = GetComponent(); + } + + private IEnumerator TravelRoutine(List path, TunnelNode startNode) + { + _isTraveling = true; + + if (_controller != null) _controller.enabled = false; + if (_rigidbody != null) _rigidbody.isKinematic = true; + + // 1. 캐릭터 높이 보정값 계산 + float heightOffset = 0f; + if (_controller != null) heightOffset = _controller.height / 2f; + + // 2. [입구 정렬] 시작 노드의 정확한 중앙 위치로 플레이어를 즉시 이동시킵니다. + // 플레이어의 '발바닥' 위치를 노드 중앙보다 heightOffset만큼 아래로 맞춤 + Vector3 entryPosition = new Vector3(startNode.transform.position.x, + startNode.transform.position.y - heightOffset, + startNode.transform.position.z); + + // 시작 지점으로 순간이동 또는 아주 빠르게 정렬 + transform.position = entryPosition; + + // 3. 경로 이동 시작 + foreach (Vector3 targetPos in path) + { + Vector3 adjustedTarget = new Vector3(targetPos.x, targetPos.y - heightOffset, targetPos.z); + + while (Vector3.Distance(transform.position, adjustedTarget) > 0.01f) + { + transform.position = Vector3.MoveTowards(transform.position, adjustedTarget, travelSpeed * Time.deltaTime); + yield return null; + } + transform.position = adjustedTarget; + } + + if (_rigidbody != null) _rigidbody.isKinematic = false; + if (_controller != null) _controller.enabled = true; + + _isTraveling = false; + } + + // StartTravel 함수에서 startNode를 코루틴에 넘겨주도록 수정 + public void StartTravel(TunnelNode startNode) + { + if (_isTraveling) return; + + List path = GeneratePath(startNode); + if (path.Count > 0) + { + // startNode 정보를 함께 넘김 + StartCoroutine(TravelRoutine(path, startNode)); + } + } + + // GeneratePath 함수는 기존과 동일하게 유지합니다. + private List GeneratePath(TunnelNode startNode) + { + List path = new List(); + TunnelNode currentNode = startNode; + HashSet visited = new HashSet(); + + while (currentNode != null && !visited.Contains(currentNode)) + { + visited.Add(currentNode); + TunnelNode exitNode = currentNode.otherEndOfThisSegment; + if (exitNode == null) break; + + path.Add(exitNode.transform.position); + currentNode = exitNode.connectedNode; + } + return path; + } +} \ No newline at end of file diff --git a/ProjectSettings/TagManager.asset b/ProjectSettings/TagManager.asset index 08de538..8036bcd 100644 --- a/ProjectSettings/TagManager.asset +++ b/ProjectSettings/TagManager.asset @@ -18,7 +18,7 @@ TagManager: - Ground - ConstructionZone - Player - - + - Interactable - - -