diff --git a/Assets/Scenes/Forest.unity b/Assets/Scenes/Forest.unity index 72c2749da99a605181f077b009fccfe16299414e..cf5f6f608d4408d34a455ec594386f92a2feb342 100644 --- a/Assets/Scenes/Forest.unity +++ b/Assets/Scenes/Forest.unity @@ -445,7 +445,7 @@ MonoBehaviour: maxZoom: 5 minZoom: 1.5 zoomStepSize: 1 - zoomDuration: 0.1 + zoomSpeed: 10 --- !u!61 &1276077110 BoxCollider2D: m_ObjectHideFlags: 0 diff --git a/Assets/Scripts/BaseCameraController.cs b/Assets/Scripts/BaseCameraController.cs index 6d8ff04659a4261ca3a0340c8b9e29ffa72aa99b..f1f9736b3e87b21c2501ffc205b5467ed95d9db8 100644 --- a/Assets/Scripts/BaseCameraController.cs +++ b/Assets/Scripts/BaseCameraController.cs @@ -13,7 +13,7 @@ public class BaseCameraController : MonoBehaviour [SerializeField] float maxZoom = 5f; [SerializeField] float minZoom = 1.5f; [SerializeField] float zoomStepSize = 1f; - [SerializeField] float zoomDuration = 0.1f; + [SerializeField] float zoomSpeed = 10f; new Camera camera; new AudioSource audio; @@ -21,11 +21,13 @@ public class BaseCameraController : MonoBehaviour new Rigidbody2D rigidbody; Interpolator zoomInterpolator; + Interpolator moveXInterpolator; + Interpolator moveYInterpolator; + Vector3 inputVector = Vector3.zero; float zoomRatio { get => camera.orthographicSize / maxZoom; } - Vector3 inputVector = Vector3.zero; void Awake() { @@ -33,7 +35,9 @@ public class BaseCameraController : MonoBehaviour audio = GetComponent<AudioSource>(); collider = GetComponent<BoxCollider2D>(); rigidbody = GetComponent<Rigidbody2D>(); - zoomInterpolator = new Interpolator(zoomDuration, camera.orthographicSize, camera.orthographicSize, minZoom, maxZoom); + zoomInterpolator = new Interpolator(1 / zoomSpeed, camera.orthographicSize, camera.orthographicSize, minZoom, maxZoom); + moveXInterpolator = new Interpolator(1 / moveSpeed); + moveYInterpolator = new Interpolator(1 / moveSpeed); UpdateColliderSize(); } @@ -50,8 +54,8 @@ public class BaseCameraController : MonoBehaviour UpdateColliderSize(); } - inputVector.x = Input.GetAxis("Horizontal"); - inputVector.y = Input.GetAxis("Vertical"); + inputVector.x = Input.GetAxisRaw("Horizontal"); + inputVector.y = Input.GetAxisRaw("Vertical"); if (inputVector.magnitude == 0) { var mouseViewportPos = camera.ScreenToWorldPoint(Input.mousePosition); @@ -59,6 +63,10 @@ public class BaseCameraController : MonoBehaviour mouseEdges.DrawDebug(); inputVector = mouseEdges.GetOutOfBoundsDirection(mouseViewportPos); } + moveXInterpolator.targetValue = inputVector.x; + moveYInterpolator.targetValue = inputVector.y; + inputVector.x = moveXInterpolator.Tick(); + inputVector.y = moveYInterpolator.Tick(); } void FixedUpdate() diff --git a/Assets/Scripts/Interpolator.cs b/Assets/Scripts/Interpolator.cs index 17b47f90f825e5f36a9599888f5418c1b7cb5025..7ba9a0f911eddac8398f138ef5d5b9baed60b9e5 100644 --- a/Assets/Scripts/Interpolator.cs +++ b/Assets/Scripts/Interpolator.cs @@ -10,8 +10,12 @@ public class Interpolator get => _targetValue; set { - _targetValue = Mathf.Clamp(value, minValue, maxValue); - running = true; + var newValue = Mathf.Clamp(value, minValue, maxValue); + if (!Mathf.Approximately(newValue, _targetValue)) + { + _targetValue = newValue; + running = true; + } } } public bool running { get; private set; }