using System.Collections; using System.Collections.Generic; using UnityEngine; public class CameraLerpMoveController : MonoSingleton { private Transform cameraMoveTarget; private Camera mainCamera; private bool isMoveLerp; public static float moveLerpSpeed = 2; public static float rotLerpSpeed = 2; private RoamCameraController m_RoamCameraController; public void Start() { mainCamera = Camera.main; if (mainCamera == null) { mainCamera = GameObject.FindObjectOfType(); } if (mainCamera.GetComponent() != null) { m_RoamCameraController = mainCamera.GetComponent(); } } public void SetCameraMoveTarget(Transform target) { cameraMoveTarget = target; isMoveLerp = true; } // Update is called once per frame void Update() { if (!isMoveLerp || cameraMoveTarget == null) return; if (m_RoamCameraController != null) { m_RoamCameraController.Focus(cameraMoveTarget.transform.position,cameraMoveTarget.transform.rotation.eulerAngles,moveLerpSpeed); isMoveLerp = false; } else { mainCamera.transform.position = Vector3.Lerp(mainCamera.transform.position, cameraMoveTarget.transform.position, moveLerpSpeed * Time.deltaTime); mainCamera.transform.rotation = Quaternion.Lerp(mainCamera.transform.rotation, cameraMoveTarget.transform.rotation, rotLerpSpeed * Time.deltaTime); if (Vector3.Distance(mainCamera.transform.position, cameraMoveTarget.transform.position) < 0.05f && Quaternion.Angle(mainCamera.transform.rotation, cameraMoveTarget.transform.rotation) < 0.05f) { isMoveLerp = false; } else if (CameraMoveCheck()) { isMoveLerp = false; } } } public bool CameraMoveCheck() { return Input.GetKey(KeyCode.W) || Input.GetKey(KeyCode.S) || Input.GetKey(KeyCode.A) || Input.GetKey(KeyCode.D) || Input.GetMouseButtonDown(1); } }