diff --git a/Assets/Materials/GrapplePoint.mat b/Assets/Materials/GrapplePoint.mat new file mode 100644 index 0000000..92ef4f9 --- /dev/null +++ b/Assets/Materials/GrapplePoint.mat @@ -0,0 +1,78 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: GrapplePoint + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 0.7728097, b: 0, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/Materials/GrapplePoint.mat.meta b/Assets/Materials/GrapplePoint.mat.meta new file mode 100644 index 0000000..56a4165 --- /dev/null +++ b/Assets/Materials/GrapplePoint.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: cce4d03b83d5bb44682271d375de60ff +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scenes/Demos/UI-UX_Demos.unity b/Assets/Scenes/Demos/UI-UX_Demos.unity index 1751220..bbfc093 100644 --- a/Assets/Scenes/Demos/UI-UX_Demos.unity +++ b/Assets/Scenes/Demos/UI-UX_Demos.unity @@ -288,7 +288,7 @@ Transform: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 462958680} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 11.35} + m_LocalPosition: {x: 0, y: 0, z: 12} m_LocalScale: {x: 10, y: 1, z: 25} m_Children: [] m_Father: {fileID: 0} @@ -552,6 +552,101 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 696875328} m_CullTransparentMesh: 1 +--- !u!1 &897829471 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 897829475} + - component: {fileID: 897829474} + - component: {fileID: 897829473} + - component: {fileID: 897829472} + m_Layer: 0 + m_Name: Grapple Point (1) + m_TagString: HookPoint + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!65 &897829472 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 897829471} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &897829473 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 897829471} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + 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: cce4d03b83d5bb44682271d375de60ff, 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!33 &897829474 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 897829471} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &897829475 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 897829471} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 45, y: 12, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 15 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &944325785 GameObject: m_ObjectHideFlags: 0 @@ -570,6 +665,7 @@ GameObject: - component: {fileID: 944325794} - component: {fileID: 944325793} - component: {fileID: 944325795} + - component: {fileID: 944325797} m_Layer: 0 m_Name: Player Capsule m_TagString: Player @@ -590,10 +686,9 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: pStats: {fileID: 944325792} + vel: {x: 0, y: 0, z: 0} + isGrounded: 0 groundCheckDistance: 0.05 - groundCheckLayers: - serializedVersion: 2 - m_Bits: 4294967295 minAngle: -15 maxAngle: 30 sensitivity: 105 @@ -686,7 +781,7 @@ Transform: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 944325785} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 2, z: 2.59} + m_LocalPosition: {x: 0, y: 2, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_Children: - {fileID: 498823948} @@ -733,6 +828,7 @@ MonoBehaviour: m_EditorClassIdentifier: items: [] pStats: {fileID: 944325792} + invMan: {fileID: 0} --- !u!114 &944325795 MonoBehaviour: m_ObjectHideFlags: 0 @@ -753,7 +849,20 @@ MonoBehaviour: jumpDuration: 0.25 wallBouncing: 3 cameraTransitionDuration: 1 - wallGravityDownForce: -1 + wallGravityDownForce: 0 +--- !u!114 &944325797 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 944325785} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: cee70ea30de57ec43a325c1ca6257526, type: 3} + m_Name: + m_EditorClassIdentifier: + maxGrappleDistance: 25 --- !u!1 &951764787 GameObject: m_ObjectHideFlags: 0 @@ -915,6 +1024,101 @@ Transform: m_Father: {fileID: 0} m_RootOrder: 9 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1161142101 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1161142105} + - component: {fileID: 1161142104} + - component: {fileID: 1161142103} + - component: {fileID: 1161142102} + m_Layer: 0 + m_Name: Start (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!65 &1161142102 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1161142101} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1161142103 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1161142101} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + 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!33 &1161142104 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1161142101} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &1161142105 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1161142101} + m_LocalRotation: {x: 0, y: 0.7071068, z: 0, w: 0.7071068} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 10, y: 1, z: 10} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 11 + m_LocalEulerAnglesHint: {x: 0, y: 90, z: 0} --- !u!1 &1206487913 GameObject: m_ObjectHideFlags: 0 @@ -1131,6 +1335,101 @@ RectTransform: m_AnchoredPosition: {x: 0, y: 0} m_SizeDelta: {x: 0, y: 0} m_Pivot: {x: 0, y: 0} +--- !u!1 &1344091341 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1344091345} + - component: {fileID: 1344091344} + - component: {fileID: 1344091343} + - component: {fileID: 1344091342} + m_Layer: 0 + m_Name: Grapple Point + m_TagString: HookPoint + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!65 &1344091342 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1344091341} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1344091343 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1344091341} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + 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: cce4d03b83d5bb44682271d375de60ff, 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!33 &1344091344 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1344091341} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &1344091345 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1344091341} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 12.5, y: 12, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 14 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1458711923 GameObject: m_ObjectHideFlags: 0 @@ -1321,6 +1620,101 @@ Transform: m_Father: {fileID: 0} m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1586401853 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1586401857} + - component: {fileID: 1586401856} + - component: {fileID: 1586401855} + - component: {fileID: 1586401854} + m_Layer: 0 + m_Name: Start (3) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!65 &1586401854 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1586401853} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1586401855 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1586401853} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + 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!33 &1586401856 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1586401853} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &1586401857 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1586401853} + m_LocalRotation: {x: 0, y: 0.7071068, z: 0, w: 0.7071068} + m_LocalPosition: {x: 65, y: 0, z: 0} + m_LocalScale: {x: 10, y: 1, z: 10} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 13 + m_LocalEulerAnglesHint: {x: 0, y: 90, z: 0} --- !u!1 &1586802181 GameObject: m_ObjectHideFlags: 0 @@ -1414,3 +1808,98 @@ Transform: m_Father: {fileID: 0} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} +--- !u!1 &1745259058 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1745259062} + - component: {fileID: 1745259061} + - component: {fileID: 1745259060} + - component: {fileID: 1745259059} + m_Layer: 0 + m_Name: Start (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!65 &1745259059 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1745259058} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1745259060 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1745259058} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + 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!33 &1745259061 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1745259058} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &1745259062 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1745259058} + m_LocalRotation: {x: 0, y: 0.7071068, z: 0, w: 0.7071068} + m_LocalPosition: {x: 25, y: 0, z: 0} + m_LocalScale: {x: 10, y: 1, z: 10} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 12 + m_LocalEulerAnglesHint: {x: 0, y: 90, z: 0} diff --git a/Assets/Scripts/PlayerScripts/GrapplingHook.cs b/Assets/Scripts/PlayerScripts/GrapplingHook.cs new file mode 100644 index 0000000..12229ec --- /dev/null +++ b/Assets/Scripts/PlayerScripts/GrapplingHook.cs @@ -0,0 +1,67 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class GrapplingHook : MonoBehaviour +{ + public float maxGrappleDistance = 25; + + private bool isGrappled; + private int hookPointIndex; + private GameObject hookPoint; + private GameObject[] hookPoints; + private float distance; + + // Start is called before the first frame update + void Start() + { + isGrappled = false; + hookPoints = GameObject.FindGameObjectsWithTag("HookPoint"); + } + + // Update is called once per frame + void Update() + { + if (Input.GetKeyDown(KeyCode.E)) //If grapple button is hit + { + if (!isGrappled) //If we are not grappling + { + hookPointIndex = FindHookPoint(); //Find the nearest hook point within max distance + if (hookPointIndex != -1) //If there is a hookpoint + { + hookPoint = hookPoints[hookPointIndex]; //The point we are grappling from + //physics set up? + isGrappled = true; //toggle grappling state + } + } + else //Else we are grappling + { + //physics tear down? + isGrappled = false; //toggle grappling state to release + } + } + } + + private void FixedUpdate() + { + if (isGrappled) + { + //Do grappling physics based on hookPoint + } + } + + int FindHookPoint() + { + float least = maxGrappleDistance; + int index = -1; + for(int i = 0; i(); pStats = GetComponent(); @@ -84,14 +86,18 @@ public class PlayerMovement : MonoBehaviour - void Start(){ - Cursor.lockState = CursorLockMode.Locked; - distToGround = GetComponent().bounds.extents.y; + void Start() + { + distToGround = GetComponent().bounds.extents.y; + Cursor.lockState = CursorLockMode.Locked; } // Update is called once per frame - void FixedUpdate(){ + void FixedUpdate() + { + //input controls for movement + InputController(); //Controls for camera Rotate(); @@ -113,6 +119,8 @@ public class PlayerMovement : MonoBehaviour Debug.Log("MoveController is either Disabled or wasn't retrieved correctly"); } + // consumes the impact energy each cycle: + impact = Vector3.Lerp(impact, Vector3.zero, 5 * Time.deltaTime); //Checks if player should respawn Respawn(); @@ -124,7 +132,8 @@ public class PlayerMovement : MonoBehaviour //Reads inputs and moves player - private void InputController(){ + private void InputController() + { //Check if player is grounded before each frame GroundCheck(); //Keyboard inputs @@ -132,7 +141,7 @@ public class PlayerMovement : MonoBehaviour //Checks if movement keys have been pressed and calculates correct vector moveX = transform.right * Input.GetAxis("Horizontal") * Time.deltaTime * PlayerSpeed(); moveZ = transform.forward * Input.GetAxis("Vertical") * Time.deltaTime * PlayerSpeed(); - + //Adds vectors based on movement keys and other conditions to check what the //player vector should be under the circumstances vel = moveX + moveZ; @@ -140,34 +149,39 @@ public class PlayerMovement : MonoBehaviour //Gravity Gravity(); - driftVel = Vector3.Lerp(driftVel, vel, pStats.Traction*Time.deltaTime); + driftVel = Vector3.Lerp(driftVel, vel, pStats.Traction * Time.deltaTime); //Jump Function Jump(); moveController.Move(driftVel); - } + } //Calculates speed current player needs to be going - public float PlayerSpeed(){ + public float PlayerSpeed() + { //If nothing is pressed speed is 0 - if(Input.GetAxis("Vertical") == 0.0f && Input.GetAxis("Horizontal") == 0.0f){ + if (Input.GetAxis("Vertical") == 0.0f && Input.GetAxis("Horizontal") == 0.0f) + { pStats.CurVel = 0.0f; - return pStats.CurVel; + return pStats.CurVel; } //If current speed is below min when pressed set to minimum speed - else if(pStats.CurVel < pStats.MinVel){ + else if (pStats.CurVel < pStats.MinVel) + { pStats.CurVel = pStats.MinVel; return pStats.MinVel; } // while the speed is below max speed slowly increase it - else if((pStats.CurVel >= pStats.MinVel) && (pStats.CurVel < pStats.MaxVel)){ + else if ((pStats.CurVel >= pStats.MinVel) && (pStats.CurVel < pStats.MaxVel)) + { pStats.CurVel += pStats.Acc; - return pStats.CurVel; + return pStats.CurVel; } //If the players speed is above or equal to max speed set speed to max - else{ + else + { pStats.CurVel = pStats.MaxVel; return pStats.CurVel; } @@ -176,7 +190,8 @@ public class PlayerMovement : MonoBehaviour //Applies impact in a direction with the given force - public void AddImpact(Vector3 dir, float force){ + public void AddImpact(Vector3 dir, float force) + { dir.Normalize(); if (dir.y < 0) dir.y = -dir.y; // reflect down force on the ground impact += dir.normalized * force / mass; @@ -185,9 +200,11 @@ public class PlayerMovement : MonoBehaviour //Jump Function - private void Jump(){ + private void Jump() + { //If space is pressed apply an upwards force to the player - if(Input.GetAxis("Jump") != 0 && !jumpPressed && curJumpNum+1 < pStats.JumpNum){ + if (Input.GetAxis("Jump") != 0 && !jumpPressed && curJumpNum + 1 < pStats.JumpNum) + { AddImpact(transform.up, pStats.JumpPow); curJumpNum++; jumpPressed = true; @@ -198,23 +215,25 @@ public class PlayerMovement : MonoBehaviour //NEEDS TO BE MASSIVELY CHANGE LIKELY USE RAYCAST TO CHECK IF ACTUALLY ON GROUND //CANNOT USE CHARACTERCONTROLLER.ISGROUNDED IT IS UNRELIABLE //If grounded no jumps have been used - if(IsGrounded()){ - curJumpNum = 0; - } + if(isGrounded){ + curJumpNum = 0; + } //If space isn't being pressed then jump is false - if(Input.GetAxis("Jump")==0) jumpPressed = false; + if (Input.GetAxis("Jump") == 0) jumpPressed = false; } public bool GetJumpPressed(){ return jumpPressed; } - public Camera GetPlayerCamera() { - return cam; + public Camera GetPlayerCamera() + { + return cam; } - public void AddPlayerVelocity(Vector3 additiveVelocity) { + public void AddPlayerVelocity(Vector3 additiveVelocity) + { vel += additiveVelocity; } @@ -238,9 +257,11 @@ public class PlayerMovement : MonoBehaviour //REMOVE WHEN UNNECCESARY //Respawns player if they fall below a certain point - private void Respawn(){ - if(transform.position.y < -1){ - transform.position = new Vector3(1f, 1f, 1f); + private void Respawn() + { + if (transform.position.y < -1) + { + transform.position = new Vector3(1f, 3f, 1f); } } @@ -274,8 +295,8 @@ public class PlayerMovement : MonoBehaviour //Wallrunning if (pStats.HasWallrun) { wallRun.WallRunRoutine(); } //adjusted later if we are wallrunning - //If gliding - //Go down slowly + //If gliding + //Go down slowly } void GroundCheck() @@ -284,58 +305,28 @@ public class PlayerMovement : MonoBehaviour float chosenGroundCheckDistance = isGrounded ? (moveController.skinWidth + groundCheckDistance) : groundCheckDistanceInAir; // reset values before the ground check isGrounded = false; - Vector3 groundNormal = Vector3.up; - - // only try to detect ground if it's been a short amount of time since last jump; otherwise we may snap to the ground instantly after we try jumping - if (Time.time >= lastTimeJumped + jumpGroundingPreventionTime) + groundRay = new Ray(moveController.transform.position, Vector3.down); + if (Physics.Raycast(groundRay, out groundHit, moveController.height + groundCheckDistance)) //&& Time.time >= lastTimeJumped + jumpGroundingPreventionTime) // only try to detect ground if it's been a short amount of time since last jump; otherwise we may snap to the ground instantly after we try jumping { - Debug.Log("detect ground"); - // if we're grounded, collect info about the ground normal with a downward capsule cast representing our character capsule - if (Physics.CapsuleCast(GetCapsuleBottomHemisphere(), GetCapsuleTopHemisphere(moveController.height), moveController.radius, Vector3.down, out RaycastHit hit, chosenGroundCheckDistance, groundCheckLayers, QueryTriggerInteraction.Ignore)) + // Only consider this a valid ground hit if the ground normal goes in the same direction as the character up + if (Vector3.Dot(groundHit.normal, transform.up) > 0f) { - Debug.Log("Collect info"); - // storing the upward direction for the surface found - groundNormal = hit.normal; - - // Only consider this a valid ground hit if the ground normal goes in the same direction as the character up - // and if the slope angle is lower than the character controller's limit - if (Vector3.Dot(hit.normal, transform.up) > 0.0f && IsNormalUnderSlopeLimit(groundNormal)) + isGrounded = true; + // handle snapping to the ground + if (groundHit.distance > moveController.skinWidth) { - Debug.Log("isGrounded"); - isGrounded = true; - - // handle snapping to the ground - if (hit.distance > moveController.skinWidth) - { - moveController.Move(Vector3.down * hit.distance); - } + moveController.Move(Vector3.down * groundHit.distance); } } } } - //Improved IsGrounded - private bool IsGrounded(){ - return Physics.Raycast(transform.position, -Vector3.up, distToGround + 0.1f, ~ignoreP); - } - - private bool IsNormalUnderSlopeLimit(Vector3 normal){ // Returns true if the slope angle represented by the given normal is under the slope angle limit of the character controller - return Vector3.Angle(transform.up, normal) <= moveController.slopeLimit; - } - - private Vector3 GetCapsuleBottomHemisphere(){ // Gets the center point of the bottom hemisphere of the character controller capsule - return transform.position + (transform.up * moveController.radius); - } - - private Vector3 GetCapsuleTopHemisphere(float atHeight){ // Gets the center point of the top hemisphere of the character controller capsule - - return transform.position + (transform.up * (atHeight - moveController.radius)); - } - //ADJUST SO DISTANCE IS DETERMINED BY SCROLL WHEEL //blinks the player forwards - private void Blink(){ - if (Input.GetMouseButton(1)){ + private void Blink() + { + if (Input.GetMouseButton(1)) + { // Finding the origin and end point of laser. origin = transform.position + transform.forward * transform.lossyScale.z; @@ -349,7 +340,8 @@ public class PlayerMovement : MonoBehaviour dir.Normalize(); // Are we hitting any colliders? - if (Physics.Raycast(origin, dir, out hit, 20f)){ + if (Physics.Raycast(origin, dir, out hit, 20f)) + { // If yes, then set endpoint to hit-point. endPoint = hit.point; } @@ -368,15 +360,18 @@ public class PlayerMovement : MonoBehaviour } - else if(!Input.GetMouseButton(1) && beam.enabled == true){ + else if (!Input.GetMouseButton(1) && beam.enabled == true) + { beam.enabled = false; //if teleporting due to hit to object, bump them a bit outside normal - if(hit.point != null) { + if (hit.point != null) + { transform.position = endPoint + hit.normal * 1.25f; } //if teleporting in the air or something, just spawn at endpoint - else{ + else + { transform.position = endPoint; } @@ -384,5 +379,5 @@ public class PlayerMovement : MonoBehaviour } } - + } diff --git a/Assets/Scripts/PlayerScripts/WallRun.cs b/Assets/Scripts/PlayerScripts/WallRun.cs index bc7d4ba..edaed04 100644 --- a/Assets/Scripts/PlayerScripts/WallRun.cs +++ b/Assets/Scripts/PlayerScripts/WallRun.cs @@ -81,14 +81,14 @@ public class WallRun : MonoBehaviour { Vector3 dir = transform.TransformDirection(directions[i]); Physics.Raycast(transform.position, dir, out hits[i], wallMaxDistance); - if(hits[i].collider != null) - { - Debug.DrawRay(transform.position, dir * hits[i].distance, Color.green); - } - else - { - Debug.DrawRay(transform.position, dir * wallMaxDistance, Color.red); - } + //if(hits[i].collider != null) + //{ + //Debug.DrawRay(transform.position, dir * hits[i].distance, Color.green); + //} + //else + //{ + //Debug.DrawRay(transform.position, dir * wallMaxDistance, Color.red); + //} } if(CanWallRun()) @@ -142,14 +142,14 @@ public class WallRun : MonoBehaviour float vertical = Input.GetAxisRaw("Vertical"); Vector3 alongWall = transform.TransformDirection(Vector3.forward); - Debug.DrawRay(transform.position, alongWall.normalized * 10, Color.green); - Debug.DrawRay(transform.position, lastWallNormal * 10, Color.magenta); + //Debug.DrawRay(transform.position, alongWall.normalized * 10, Color.green); + //Debug.DrawRay(transform.position, lastWallNormal * 10, Color.magenta); Vector3 moveToSet = alongWall * vertical * playerMovementController.PlayerSpeed() *Time.deltaTime;// * wallSpeedMultiplier; moveToSet.y = 0; playerMovementController.SetPlayerVelocity(moveToSet); - Debug.Log("On Wall"); + //Debug.Log("On Wall"); isWallRunning = true; } } diff --git a/ProjectSettings/TagManager.asset b/ProjectSettings/TagManager.asset index 5c0ffa9..ab274e7 100644 --- a/ProjectSettings/TagManager.asset +++ b/ProjectSettings/TagManager.asset @@ -7,6 +7,7 @@ TagManager: - WallRun - kickable - PlayerCam + - HookPoint layers: - Default - TransparentFX