CameraLerpMoveController.cs 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. public class CameraLerpMoveController : MonoSingleton<CameraLerpMoveController>
  5. {
  6. private Transform cameraMoveTarget;
  7. private Camera mainCamera;
  8. private bool isMoveLerp;
  9. public static float moveLerpSpeed = 2;
  10. public static float rotLerpSpeed = 2;
  11. private RoamCameraController m_RoamCameraController;
  12. public void Start()
  13. {
  14. mainCamera = Camera.main;
  15. if (mainCamera == null)
  16. {
  17. mainCamera = GameObject.FindObjectOfType<Camera>();
  18. }
  19. if (mainCamera.GetComponent<RoamCameraController>() != null)
  20. {
  21. m_RoamCameraController = mainCamera.GetComponent<RoamCameraController>();
  22. }
  23. }
  24. public void SetCameraMoveTarget(Transform target)
  25. {
  26. cameraMoveTarget = target;
  27. isMoveLerp = true;
  28. }
  29. // Update is called once per frame
  30. void Update()
  31. {
  32. if (!isMoveLerp || cameraMoveTarget == null) return;
  33. if (m_RoamCameraController != null)
  34. {
  35. m_RoamCameraController.Focus(cameraMoveTarget.transform.position,cameraMoveTarget.transform.rotation.eulerAngles,moveLerpSpeed);
  36. isMoveLerp = false;
  37. }
  38. else
  39. {
  40. mainCamera.transform.position = Vector3.Lerp(mainCamera.transform.position, cameraMoveTarget.transform.position, moveLerpSpeed * Time.deltaTime);
  41. mainCamera.transform.rotation = Quaternion.Lerp(mainCamera.transform.rotation, cameraMoveTarget.transform.rotation, rotLerpSpeed * Time.deltaTime);
  42. if (Vector3.Distance(mainCamera.transform.position, cameraMoveTarget.transform.position) < 0.05f
  43. && Quaternion.Angle(mainCamera.transform.rotation, cameraMoveTarget.transform.rotation) < 0.05f)
  44. {
  45. isMoveLerp = false;
  46. }
  47. else if (CameraMoveCheck())
  48. {
  49. isMoveLerp = false;
  50. }
  51. }
  52. }
  53. public bool CameraMoveCheck()
  54. {
  55. return Input.GetKey(KeyCode.W) || Input.GetKey(KeyCode.S) || Input.GetKey(KeyCode.A) || Input.GetKey(KeyCode.D) || Input.GetMouseButtonDown(1);
  56. }
  57. }