From 2abfb6368aceca3f258c8be2efb5f770365a5b08 Mon Sep 17 00:00:00 2001 From: Jack Wright <68773585+Ethirix@users.noreply.github.com> Date: Sun, 6 Oct 2024 03:03:52 +0100 Subject: [PATCH 1/3] Base Camera Input Completed Discussion needed on how Camera Sensitivity is going to work as the input system seems to work much different to how old-style mouse input would create camera rotation. Also, the ability to determine what device type is currently doing input to have some sort of way to apply Sensitivity depending on the device type. --- .../Assets/Camera/Scripts/CameraController.cs | 54 +++++++++++-------- Lares/Assets/Player/PlayerControls.cs | 2 +- .../Assets/Player/PlayerControls.inputactions | 2 +- 3 files changed, 33 insertions(+), 25 deletions(-) diff --git a/Lares/Assets/Camera/Scripts/CameraController.cs b/Lares/Assets/Camera/Scripts/CameraController.cs index e26c700..bd6da28 100644 --- a/Lares/Assets/Camera/Scripts/CameraController.cs +++ b/Lares/Assets/Camera/Scripts/CameraController.cs @@ -6,6 +6,7 @@ namespace Lares.Camera.Scripts //Determine if Camera is in correct position //Raycast between Camera and center, ignore the player somehow + [RequireComponent(typeof(PlayerControls))] public class CameraController : MonoBehaviour { [Header("Objects")] @@ -22,57 +23,64 @@ public class CameraController : MonoBehaviour private void Awake() { - if (!Application.isPlaying) return; - _playerControls = new PlayerControls(); } private void Start() { transform.localPosition = _cameraCenter; + transform.localRotation = Quaternion.identity; _camera.transform.localPosition = new Vector3(_cameraOffset.x, _cameraOffset.y, -_distanceFromCenter); } private void OnEnable() { - if (!Application.isPlaying) return; - _playerControls.Enable(); _playerControls.BaseControls.MoveCamera.performed += OnMoveCameraPerformed; + _playerControls.BaseControls.MoveCamera.canceled += OnMoveCameraCanceled; } private void OnDisable() { - if (!Application.isPlaying) return; - - _playerControls.Disable(); _playerControls.BaseControls.MoveCamera.performed -= OnMoveCameraPerformed; + _playerControls.BaseControls.MoveCamera.canceled -= OnMoveCameraCanceled; + + _playerControls.Disable(); } private void LateUpdate() { - if (!Application.isPlaying) return; - - transform.localPosition = _cameraCenter; - _camera.transform.localPosition = new Vector3(_cameraOffset.x, _cameraOffset.y, -_distanceFromCenter); - - _inputVector.y = Mathf.Clamp(_inputVector.y, -90f, 90); - switch (_inputVector.x) + if (transform.localPosition != _cameraCenter) { - case >= 360f: - _inputVector.x -= 360f; - break; - case <= -360f: - _inputVector.x += 360f; - break; + transform.localPosition = _cameraCenter; + _camera.transform.localPosition = new Vector3(_cameraOffset.x, _cameraOffset.y, -_distanceFromCenter); } - transform.localRotation = Quaternion.Euler(_inputVector.y, -_inputVector.x, 0); - } + if (_inputVector == Vector2.zero) + return; + Vector3 currentRotation = transform.localEulerAngles; + currentRotation.x += _inputVector.y; + currentRotation.y -= _inputVector.x; + + currentRotation.x = currentRotation.x switch + { + >= 180f and < 270f => 270f, + > 90f and < 180f => 90f, + _ => currentRotation.x + }; + + transform.localRotation = Quaternion.Euler(currentRotation); + } + private void OnMoveCameraPerformed(InputAction.CallbackContext context) { - _inputVector += context.ReadValue(); + _inputVector = context.ReadValue(); + } + + private void OnMoveCameraCanceled(InputAction.CallbackContext context) + { + _inputVector = Vector2.zero; } } } \ No newline at end of file diff --git a/Lares/Assets/Player/PlayerControls.cs b/Lares/Assets/Player/PlayerControls.cs index 47b59f2..ddf9f58 100644 --- a/Lares/Assets/Player/PlayerControls.cs +++ b/Lares/Assets/Player/PlayerControls.cs @@ -131,7 +131,7 @@ public @PlayerControls() { ""name"": ""2D Vector"", ""id"": ""4ae4cee4-816b-426b-9e6e-e4f0aed0122e"", - ""path"": ""2DVector"", + ""path"": ""2DVector(mode=2)"", ""interactions"": """", ""processors"": """", ""groups"": """", diff --git a/Lares/Assets/Player/PlayerControls.inputactions b/Lares/Assets/Player/PlayerControls.inputactions index 45f8678..14477bc 100644 --- a/Lares/Assets/Player/PlayerControls.inputactions +++ b/Lares/Assets/Player/PlayerControls.inputactions @@ -109,7 +109,7 @@ { "name": "2D Vector", "id": "4ae4cee4-816b-426b-9e6e-e4f0aed0122e", - "path": "2DVector", + "path": "2DVector(mode=2)", "interactions": "", "processors": "", "groups": "", From 4507d1385efd36c858c9b67bdeef2b669e6d3a5d Mon Sep 17 00:00:00 2001 From: Jack Wright <68773585+Ethirix@users.noreply.github.com> Date: Sun, 6 Oct 2024 19:29:44 +0100 Subject: [PATCH 2/3] Added Mouse and Controller Sensitivity Currently bound between 0.01 and 2 as beyond values beyond 2 seem to be very extreme. --- .../Assets/Camera/Prefabs/PlayerCamera.prefab | 8 +- .../Assets/Camera/Scripts/CameraController.cs | 24 +- Lares/Assets/Scenes/SampleScene.unity | 482 ++++++++++++++++++ Lares/Assets/Scenes/SampleScene.unity.meta | 7 + 4 files changed, 513 insertions(+), 8 deletions(-) create mode 100644 Lares/Assets/Scenes/SampleScene.unity create mode 100644 Lares/Assets/Scenes/SampleScene.unity.meta diff --git a/Lares/Assets/Camera/Prefabs/PlayerCamera.prefab b/Lares/Assets/Camera/Prefabs/PlayerCamera.prefab index 080c3a3..51f6447 100644 --- a/Lares/Assets/Camera/Prefabs/PlayerCamera.prefab +++ b/Lares/Assets/Camera/Prefabs/PlayerCamera.prefab @@ -49,7 +49,9 @@ MonoBehaviour: _camera: {fileID: 3085492360813940509} _cameraCenter: {x: 0, y: 0, z: 0} _cameraOffset: {x: 0, y: 0} - _distanceFromCenter: 0 + _distanceFromCenter: 3 + _mouseSensitivity: 1 + _controllerSensitivity: 1 --- !u!114 &6797900550905813070 MonoBehaviour: m_ObjectHideFlags: 0 @@ -78,7 +80,7 @@ MonoBehaviour: m_ActionEvents: [] m_NeverAutoSwitchControlSchemes: 0 m_DefaultControlScheme: - m_DefaultActionMap: 52975b73-2aa1-4539-89d0-52d2579b712a + m_DefaultActionMap: BaseControls m_SplitScreenIndex: -1 m_Camera: {fileID: 0} --- !u!1 &7343679560158206760 @@ -109,7 +111,7 @@ Transform: m_GameObject: {fileID: 7343679560158206760} serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: -0} + m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] diff --git a/Lares/Assets/Camera/Scripts/CameraController.cs b/Lares/Assets/Camera/Scripts/CameraController.cs index bd6da28..dca6c0e 100644 --- a/Lares/Assets/Camera/Scripts/CameraController.cs +++ b/Lares/Assets/Camera/Scripts/CameraController.cs @@ -6,17 +6,21 @@ namespace Lares.Camera.Scripts //Determine if Camera is in correct position //Raycast between Camera and center, ignore the player somehow - [RequireComponent(typeof(PlayerControls))] + [RequireComponent(typeof(PlayerInput))] public class CameraController : MonoBehaviour { [Header("Objects")] [SerializeField] private UnityEngine.Camera _camera; [Header("Camera Settings")] - [SerializeField] private Vector3 _cameraCenter; [SerializeField] private Vector2 _cameraOffset; [SerializeField] private float _distanceFromCenter; + + [Header("Input Settings")] + [SerializeField, Range(0.01f, 2f)] private float _mouseSensitivity = 1f; + [SerializeField, Range(0.01f, 2f)] private float _controllerSensitivity = 1f; + private PlayerInput _playerInput; private PlayerControls _playerControls; private Vector2 _inputVector; @@ -28,9 +32,10 @@ private void Awake() private void Start() { - transform.localPosition = _cameraCenter; transform.localRotation = Quaternion.identity; _camera.transform.localPosition = new Vector3(_cameraOffset.x, _cameraOffset.y, -_distanceFromCenter); + + _playerInput = GetComponent(); } private void OnEnable() @@ -50,15 +55,24 @@ private void OnDisable() private void LateUpdate() { - if (transform.localPosition != _cameraCenter) + if (_camera.transform.localPosition != (Vector3)_cameraOffset) { - transform.localPosition = _cameraCenter; _camera.transform.localPosition = new Vector3(_cameraOffset.x, _cameraOffset.y, -_distanceFromCenter); } if (_inputVector == Vector2.zero) return; + switch (_playerInput.currentControlScheme) + { + case "Controller": + _inputVector *= _controllerSensitivity; + break; + case "Keyboard and Mouse": + _inputVector *= _mouseSensitivity; + break; + } + Vector3 currentRotation = transform.localEulerAngles; currentRotation.x += _inputVector.y; currentRotation.y -= _inputVector.x; diff --git a/Lares/Assets/Scenes/SampleScene.unity b/Lares/Assets/Scenes/SampleScene.unity new file mode 100644 index 0000000..d3d8d7f --- /dev/null +++ b/Lares/Assets/Scenes/SampleScene.unity @@ -0,0 +1,482 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 10 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 0 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 12 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 0 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 512 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 256 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 1 + m_PVRDenoiserTypeDirect: 1 + m_PVRDenoiserTypeIndirect: 1 + m_PVRDenoiserTypeAO: 1 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 1 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 20201, guid: 0000000000000000f000000000000000, type: 0} + m_LightingSettings: {fileID: 0} +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 3 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + buildHeightMesh: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1001 &70532028 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 1138397323} + m_Modifications: + - target: {fileID: 2379264742062872151, guid: 198d9f6896f5af54989a7e5d663af39e, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2379264742062872151, guid: 198d9f6896f5af54989a7e5d663af39e, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2379264742062872151, guid: 198d9f6896f5af54989a7e5d663af39e, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2379264742062872151, guid: 198d9f6896f5af54989a7e5d663af39e, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 2379264742062872151, guid: 198d9f6896f5af54989a7e5d663af39e, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2379264742062872151, guid: 198d9f6896f5af54989a7e5d663af39e, + type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2379264742062872151, guid: 198d9f6896f5af54989a7e5d663af39e, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2379264742062872151, guid: 198d9f6896f5af54989a7e5d663af39e, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2379264742062872151, guid: 198d9f6896f5af54989a7e5d663af39e, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2379264742062872151, guid: 198d9f6896f5af54989a7e5d663af39e, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2511604713696256102, guid: 198d9f6896f5af54989a7e5d663af39e, + type: 3} + propertyPath: m_Name + value: PlayerCamera + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 198d9f6896f5af54989a7e5d663af39e, type: 3} +--- !u!1 &410087039 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 410087041} + - component: {fileID: 410087040} + - component: {fileID: 410087042} + m_Layer: 0 + m_Name: Directional Light + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!108 &410087040 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 410087039} + m_Enabled: 1 + serializedVersion: 11 + m_Type: 1 + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_Intensity: 2 + m_Range: 10 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.80208 + m_CookieSize: 10 + m_Shadows: + m_Type: 2 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingLayerMask: 1 + m_Lightmapping: 4 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 5000 + m_UseColorTemperature: 1 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 + m_UseViewFrustumForShadowCasterCull: 1 + m_ForceVisible: 0 + m_ShadowRadius: 0 + m_ShadowAngle: 0 + m_LightUnit: 1 + m_LuxAtDistance: 1 + m_EnableSpotReflector: 1 +--- !u!4 &410087041 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 410087039} + serializedVersion: 2 + m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261} + m_LocalPosition: {x: 0, y: 3, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} +--- !u!114 &410087042 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 410087039} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 474bcb49853aa07438625e644c072ee6, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Version: 3 + m_UsePipelineSettings: 1 + m_AdditionalLightsShadowResolutionTier: 2 + m_LightLayerMask: 1 + m_RenderingLayers: 1 + m_CustomShadowLayers: 0 + m_ShadowLayerMask: 1 + m_ShadowRenderingLayers: 1 + m_LightCookieSize: {x: 1, y: 1} + m_LightCookieOffset: {x: 0, y: 0} + m_SoftShadowQuality: 1 +--- !u!1 &832575517 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 832575519} + - component: {fileID: 832575518} + m_Layer: 0 + m_Name: Global Volume + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &832575518 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 832575517} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 172515602e62fb746b5d573b38a5fe58, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IsGlobal: 1 + priority: 0 + blendDistance: 0 + weight: 1 + sharedProfile: {fileID: 11400000, guid: a6560a915ef98420e9faacc1c7438823, type: 2} +--- !u!4 &832575519 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 832575517} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1138397319 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1138397323} + - component: {fileID: 1138397322} + - component: {fileID: 1138397321} + - component: {fileID: 1138397320} + m_Layer: 0 + m_Name: '"Player"' + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!136 &1138397320 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1138397319} + 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: 2 + m_Radius: 0.5 + m_Height: 2 + m_Direction: 1 + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1138397321 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1138397319} + 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_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!33 &1138397322 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1138397319} + m_Mesh: {fileID: 10208, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &1138397323 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1138397319} + 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: + - {fileID: 1474284381} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &1474284381 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 2379264742062872151, guid: 198d9f6896f5af54989a7e5d663af39e, + type: 3} + m_PrefabInstance: {fileID: 70532028} + m_PrefabAsset: {fileID: 0} +--- !u!1660057539 &9223372036854775807 +SceneRoots: + m_ObjectHideFlags: 0 + m_Roots: + - {fileID: 410087041} + - {fileID: 832575519} + - {fileID: 1138397323} diff --git a/Lares/Assets/Scenes/SampleScene.unity.meta b/Lares/Assets/Scenes/SampleScene.unity.meta new file mode 100644 index 0000000..9531828 --- /dev/null +++ b/Lares/Assets/Scenes/SampleScene.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 99c9720ab356a0642a771bea13969a05 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: From a017b133440988047017540a61c9dc1c179c9bb1 Mon Sep 17 00:00:00 2001 From: Jack Wright <68773585+Ethirix@users.noreply.github.com> Date: Sun, 13 Oct 2024 18:13:39 +0100 Subject: [PATCH 3/3] Camera-Dependant Character Movement Completed --- .../Assets/Camera/Scripts/CameraController.cs | 9 +- .../Assets/Player/Scripts/PlayerAnimation.cs | 3 +- Lares/Assets/Player/Scripts/PlayerMovement.cs | 92 ++++++------- Lares/Assets/Scenes/Test.unity | 125 +++++++++++++++++- 4 files changed, 168 insertions(+), 61 deletions(-) diff --git a/Lares/Assets/Camera/Scripts/CameraController.cs b/Lares/Assets/Camera/Scripts/CameraController.cs index dca6c0e..c9586b4 100644 --- a/Lares/Assets/Camera/Scripts/CameraController.cs +++ b/Lares/Assets/Camera/Scripts/CameraController.cs @@ -6,11 +6,11 @@ namespace Lares.Camera.Scripts //Determine if Camera is in correct position //Raycast between Camera and center, ignore the player somehow - [RequireComponent(typeof(PlayerInput))] public class CameraController : MonoBehaviour { [Header("Objects")] [SerializeField] private UnityEngine.Camera _camera; + [SerializeField] private PlayerInput _playerInput; [Header("Camera Settings")] [SerializeField] private Vector2 _cameraOffset; @@ -20,7 +20,7 @@ public class CameraController : MonoBehaviour [SerializeField, Range(0.01f, 2f)] private float _mouseSensitivity = 1f; [SerializeField, Range(0.01f, 2f)] private float _controllerSensitivity = 1f; - private PlayerInput _playerInput; + private PlayerControls _playerControls; private Vector2 _inputVector; @@ -28,14 +28,15 @@ public class CameraController : MonoBehaviour private void Awake() { _playerControls = new PlayerControls(); + + if (!_playerInput) + Debug.LogError("Player Input not found!"); } private void Start() { transform.localRotation = Quaternion.identity; _camera.transform.localPosition = new Vector3(_cameraOffset.x, _cameraOffset.y, -_distanceFromCenter); - - _playerInput = GetComponent(); } private void OnEnable() diff --git a/Lares/Assets/Player/Scripts/PlayerAnimation.cs b/Lares/Assets/Player/Scripts/PlayerAnimation.cs index db23581..c8dba13 100644 --- a/Lares/Assets/Player/Scripts/PlayerAnimation.cs +++ b/Lares/Assets/Player/Scripts/PlayerAnimation.cs @@ -1,8 +1,7 @@ using UnityEngine; -using UnityEngine.EventSystems; using UnityEngine.InputSystem; -namespace Lares +namespace Lares.Player.Scripts { public class PlayerAnimation : MonoBehaviour { diff --git a/Lares/Assets/Player/Scripts/PlayerMovement.cs b/Lares/Assets/Player/Scripts/PlayerMovement.cs index fe6479d..d84aba3 100644 --- a/Lares/Assets/Player/Scripts/PlayerMovement.cs +++ b/Lares/Assets/Player/Scripts/PlayerMovement.cs @@ -2,23 +2,24 @@ using UnityEngine; using UnityEngine.InputSystem; -namespace Lares +namespace Lares.Player.Scripts { public class PlayerMovement : MonoBehaviour { - PlayerInput _input; - Vector3 moveDirection; - Rigidbody _rigidbody; - Coroutine _moveCoroutine; - int _jumpNo = 0; - [SerializeField] float movementForce; - [SerializeField] float maxSpeed; - [SerializeField] float jumpForce; - [SerializeField] float rotationSpeed; - - - // Start is called once before the first execution of Update after the MonoBehaviour is created - void Start() + private PlayerInput _input; + private Vector3 _moveDirection; + private Rigidbody _rigidbody; + private Coroutine _moveCoroutine; + private int _jumpNo; + + [SerializeField] private float _movementForce; + [SerializeField] private float _maxSpeed; + [SerializeField] private float _jumpForce; + [SerializeField] private float _rotationSpeed; + + [SerializeField] private Transform _cameraTransform; + + private void Start() { _rigidbody = GetComponent(); _input = GetComponent(); @@ -30,66 +31,61 @@ void Start() _input.currentActionMap.FindAction("Evade").performed += Evade; } - #region move player - void MoveStart(InputAction.CallbackContext context) + #region Player Movement + + private void MoveStart(InputAction.CallbackContext context) { Vector2 movementInput = context.ReadValue(); - - moveDirection = new Vector3(movementInput.x, 0f, movementInput.y).normalized; - - moveDirection = new Vector3(movementInput.x, 0f, movementInput.y); - - if (_moveCoroutine == null) { StartCoroutine(Move()); } - + + _moveDirection = new Vector3(movementInput.x, 0f, movementInput.y); + _moveCoroutine ??= StartCoroutine(Move()); } - void MoveEnd(InputAction.CallbackContext context) + private void MoveEnd(InputAction.CallbackContext context) { - moveDirection = Vector3.zero; + _moveDirection = Vector3.zero; } - IEnumerator Move() + private IEnumerator Move() { - GameObject cameraLook = transform.GetChild(0).gameObject; GameObject model = transform.GetChild(1).gameObject; - while (moveDirection != Vector3.zero) + while (_moveDirection != Vector3.zero) { - _rigidbody.MovePosition(transform.position + (moveDirection * movementForce) * Time.fixedDeltaTime); - Quaternion targetRot = cameraLook.transform.rotation * Quaternion.LookRotation(moveDirection, Vector3.up); - model.transform.rotation = Quaternion.Slerp(model.transform.rotation, targetRot, rotationSpeed); - + model.transform.rotation = Quaternion.Slerp(model.transform.rotation, + Quaternion.Euler(0, _cameraTransform.rotation.eulerAngles.y, 0), _rotationSpeed); + + _rigidbody.AddForce(model.transform.forward * (_moveDirection.z * _movementForce * Time.fixedDeltaTime), + ForceMode.VelocityChange); + _rigidbody.AddForce(model.transform.right * (_moveDirection.x * _movementForce * Time.fixedDeltaTime), + ForceMode.VelocityChange); + yield return new WaitForFixedUpdate(); } //_rigidbody.maxAngularVelocity = _rigidbody.maxAngularVelocity / 1.5f; + _moveCoroutine = null; } #endregion - - #region Jump - - void Jump(InputAction.CallbackContext context) + + private void Jump(InputAction.CallbackContext context) { if (_jumpNo < 2) { - _rigidbody.AddForce(new Vector3(0f, jumpForce - _rigidbody.linearVelocity.y, 0f), ForceMode.Impulse); + _rigidbody.AddForce(new Vector3(0f, _jumpForce - _rigidbody.linearVelocity.y, 0f), ForceMode.Impulse); _jumpNo++; } } - #endregion - - #region Interact - void Interact(InputAction.CallbackContext context) + + private void Interact(InputAction.CallbackContext context) { - } - #endregion - - #region Evade - void Evade(InputAction.CallbackContext context) { } - #endregion - + + private void Evade(InputAction.CallbackContext context) + { + } + private void OnCollisionEnter(Collision collision) { _jumpNo = 0; diff --git a/Lares/Assets/Scenes/Test.unity b/Lares/Assets/Scenes/Test.unity index 8c927ba..3c48844 100644 --- a/Lares/Assets/Scenes/Test.unity +++ b/Lares/Assets/Scenes/Test.unity @@ -118,6 +118,12 @@ NavMeshSettings: debug: m_Flags: 0 m_NavMeshData: {fileID: 0} +--- !u!4 &145460218 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 2379264742062872151, guid: 198d9f6896f5af54989a7e5d663af39e, + type: 3} + m_PrefabInstance: {fileID: 1154946001} + m_PrefabAsset: {fileID: 0} --- !u!1001 &235956305 PrefabInstance: m_ObjectHideFlags: 0 @@ -129,17 +135,17 @@ PrefabInstance: - target: {fileID: -8679921383154817045, guid: d6bffbf0d3b43f247bc9e6505c8f2e53, type: 3} propertyPath: m_LocalPosition.x - value: -1.1350164 + value: 0 objectReference: {fileID: 0} - target: {fileID: -8679921383154817045, guid: d6bffbf0d3b43f247bc9e6505c8f2e53, type: 3} propertyPath: m_LocalPosition.y - value: -0.19335985 + value: 0 objectReference: {fileID: 0} - target: {fileID: -8679921383154817045, guid: d6bffbf0d3b43f247bc9e6505c8f2e53, type: 3} propertyPath: m_LocalPosition.z - value: -0.75197625 + value: 0 objectReference: {fileID: 0} - target: {fileID: -8679921383154817045, guid: d6bffbf0d3b43f247bc9e6505c8f2e53, type: 3} @@ -395,10 +401,11 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 8457699371b065f42a5afc085ce43534, type: 3} m_Name: m_EditorClassIdentifier: - movementForce: 5 - maxSpeed: 4 - jumpForce: 5 - rotationSpeed: 0.1 + _movementForce: 10 + _maxSpeed: 4 + _jumpForce: 5 + _rotationSpeed: 0.1 + _cameraTransform: {fileID: 145460218} --- !u!54 &490723952 Rigidbody: m_ObjectHideFlags: 0 @@ -472,6 +479,7 @@ Transform: m_Children: - {fileID: 263515828} - {fileID: 1507139258} + - {fileID: 145460218} m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!136 &490723955 @@ -684,6 +692,109 @@ Transform: m_Children: [] m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} +--- !u!1001 &1154946001 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 490723954} + m_Modifications: + - target: {fileID: 2379264742062872151, guid: 198d9f6896f5af54989a7e5d663af39e, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2379264742062872151, guid: 198d9f6896f5af54989a7e5d663af39e, + type: 3} + propertyPath: m_LocalPosition.y + value: 1.355 + objectReference: {fileID: 0} + - target: {fileID: 2379264742062872151, guid: 198d9f6896f5af54989a7e5d663af39e, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2379264742062872151, guid: 198d9f6896f5af54989a7e5d663af39e, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 2379264742062872151, guid: 198d9f6896f5af54989a7e5d663af39e, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2379264742062872151, guid: 198d9f6896f5af54989a7e5d663af39e, + type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2379264742062872151, guid: 198d9f6896f5af54989a7e5d663af39e, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2379264742062872151, guid: 198d9f6896f5af54989a7e5d663af39e, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2379264742062872151, guid: 198d9f6896f5af54989a7e5d663af39e, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2379264742062872151, guid: 198d9f6896f5af54989a7e5d663af39e, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2511604713696256102, guid: 198d9f6896f5af54989a7e5d663af39e, + type: 3} + propertyPath: m_Name + value: PlayerCamera + objectReference: {fileID: 0} + - target: {fileID: 3152537829569927056, guid: 198d9f6896f5af54989a7e5d663af39e, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3152537829569927056, guid: 198d9f6896f5af54989a7e5d663af39e, + type: 3} + propertyPath: m_LocalPosition.z + value: -1 + objectReference: {fileID: 0} + - target: {fileID: 6797900550905813070, guid: 198d9f6896f5af54989a7e5d663af39e, + type: 3} + propertyPath: m_Enabled + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6797900550905813070, guid: 198d9f6896f5af54989a7e5d663af39e, + type: 3} + propertyPath: m_DefaultActionMap + value: BaseControls + objectReference: {fileID: 0} + - target: {fileID: 8414152557787723358, guid: 198d9f6896f5af54989a7e5d663af39e, + type: 3} + propertyPath: _playerInput + value: + objectReference: {fileID: 490723953} + - target: {fileID: 8414152557787723358, guid: 198d9f6896f5af54989a7e5d663af39e, + type: 3} + propertyPath: _mouseSensitivity + value: 0.2 + objectReference: {fileID: 0} + - target: {fileID: 8414152557787723358, guid: 198d9f6896f5af54989a7e5d663af39e, + type: 3} + propertyPath: _distanceFromCenter + value: 3 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 198d9f6896f5af54989a7e5d663af39e, type: 3} --- !u!1 &1238714000 GameObject: m_ObjectHideFlags: 0