From f2ff74d3653a611a187faaa153931bef2af0a6ac Mon Sep 17 00:00:00 2001 From: wasdennnoch <leiter04@gmail.com> Date: Fri, 2 Apr 2021 22:23:51 +0200 Subject: [PATCH] Interpolate mouse-based camera movement --- Assets/Scenes/Forest.unity | 2 +- Assets/Scripts/BaseCameraController.cs | 18 +++++++++++++----- Assets/Scripts/Interpolator.cs | 8 ++++++-- 3 files changed, 20 insertions(+), 8 deletions(-) diff --git a/Assets/Scenes/Forest.unity b/Assets/Scenes/Forest.unity index 72c2749..cf5f6f6 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 6d8ff04..f1f9736 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 17b47f9..7ba9a0f 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; } -- GitLab