From 117005aa67b77338683624ec45b91febd95a996c Mon Sep 17 00:00:00 2001 From: Alexandre Coirier Date: Wed, 27 May 2026 14:14:22 +0200 Subject: [PATCH] wip: PlayerCamera --- Assets/_Content/Scripts/PlayerCamera.cs | 51 +++++++++++++++++++++---- 1 file changed, 43 insertions(+), 8 deletions(-) diff --git a/Assets/_Content/Scripts/PlayerCamera.cs b/Assets/_Content/Scripts/PlayerCamera.cs index ea704af..064c50b 100644 --- a/Assets/_Content/Scripts/PlayerCamera.cs +++ b/Assets/_Content/Scripts/PlayerCamera.cs @@ -1,6 +1,7 @@ using UnityEngine; using UnityEngine.InputSystem; +[ExecuteInEditMode] public class PlayerCamera : MonoBehaviour { [System.Serializable] @@ -42,11 +43,8 @@ public class PlayerCamera : MonoBehaviour public Transform Target; } - [SerializeField] - private Settings _settings; - - [SerializeField] - private References _references; + [SerializeField] private Settings _settings; + [SerializeField] private References _references; private float _yaw; private float _pitch; @@ -54,9 +52,13 @@ public class PlayerCamera : MonoBehaviour private Vector3 _playerPosition; private InputAction _lookAction; - void OnEnable() + void Awake() { _lookAction = _references.InputActions.FindActionMap("Player").FindAction("Look"); + } + + void OnEnable() + { _lookAction?.Enable(); } @@ -71,21 +73,54 @@ public class PlayerCamera : MonoBehaviour SetCursor(); SetYawAndPitch(t); - SetPosition(); + SetPosition(t); } private void SetCursor() { + if (!Application.isPlaying) + return; + bool lockCursor = !Player.Instance.State.IsPaused; + + Cursor.lockState = lockCursor ? CursorLockMode.Locked : CursorLockMode.None; + Cursor.visible = !lockCursor; } private void SetYawAndPitch(float deltaTime) { + if (Player.Instance && Player.Instance.State.IsPaused) + return; +#if UNITY_EDITOR + if ((Mouse.current.position.ReadValue() - new Vector2(Screen.width, Screen.height) * .5f).magnitude > 10) + return; +#else + if (!Application.isFocused) return; +#endif + + Vector2 lookInput = _lookAction?.ReadValue() ?? Vector2.zero; + + _pitch -= lookInput.y * _settings.LookSensitivity * deltaTime; + _pitch = Mathf.Clamp(_pitch, _settings.MinPitch, _settings.MaxPitch); + + _yaw += lookInput.x * _settings.LookSensitivity * deltaTime; } - private void SetPosition() + private void SetPosition(float deltaTime) { + float t = (1.1f - _settings.FollowSmoothness) * 20 * deltaTime; + _playerPosition = Vector3.Lerp(_playerPosition, _references.Target.position, t); + Vector3 camPos = Vector3.back * _settings.Distance; + camPos = Quaternion.Euler(_pitch, _yaw, 0) * camPos; + camPos += _playerPosition; + + Quaternion camRot = Quaternion.LookRotation(_playerPosition - camPos); + + camPos.y += _settings.VerticalOffset; + + transform.position = camPos; + transform.rotation = camRot; } }