EP03.결론

상태
우선은 Player의 자식에 있던 카메라를 다시 빼고, Script로 Camera를 제어하기로 하였다.
using System.Collections; using System.Collections.Generic; using UnityEngine; public class followCamera : MonoBehaviour { [SerializeField] Transform target; // target [SerializeField] Transform target2; // target public float dist = 10.0f; // 거리 public float height = 5.0f; // 높이 public float dampRotate = 5.0f; //회전 속도 private Transform tr; // 카메라 private Vector3 velocity = Vector3.zero; public float smoothTime = 0.3F; private void Start() { tr = GetComponent<Transform>(); } void LateUpdate() { float cur_Y_Angle = Mathf.LerpAngle(tr.eulerAngles.y, target.eulerAngles.y, dampRotate * Time.deltaTime); //Mathf.LerpAngle(float s, float e, flaot t) = t시간 동안 s부터 e까지 각도를 변환하는 것. Quaternion rot = Quaternion.Euler(0, cur_Y_Angle, 0); tr.position = Vector3.SmoothDamp(transform.position, target.position - (rot * Vector3.forward * dist) + (Vector3.up * height), ref velocity, smoothTime); //tr.position = target.position - (rot * Vector3.forward * dist) + (Vector3.up * height); //타겟 위치 - 카메라위치 = 카메라가 타겟 뒤로 가야 타겟이 보이겠죠? tr.LookAt(target2); } }
  1. Mathf.LerpAngle(tr.eulerAngles.y, target.eulerAngles.y, dampRotate * Time.deltaTime);
    1. 이 연산은 현재 카메라의 Y 축 회전 각도를 목표 대상의 Y 축 회전 각도로서 부드럽게 변화시키는 역할을 합니다. Mathf.LerpAngle 함수는 세 개의 인자를 받습니다:
      • s: 시작 각도 (현재 카메라의 Y 축 회전 각도인 tr.eulerAngles.y)
      • e: 종료 각도 (목표 대상의 Y 축 회전 각도인 target.eulerAngles.y)
      • t: 변화 속도를 제어하는 값 (dampRotate * Time.deltaTime)
      따라서, 이 연산은 현재 카메라의 회전 각도를 점진적으로 목표 대상의 회전 각도로 변화시키는 데 사용됩니다.
  1. Quaternion rot = Quaternion.Euler(0, cur_Y_Angle, 0);
    1. 이 부분은 이전 연산에서 구한 변화된 회전 각도를 이용하여 회전 정보를 저장하는 Quaternion을 생성합니다. Quaternion.Euler 함수는 오일러 각도를 Quaternion으로 변환하는 데 사용됩니다. 여기서는 Y 축 회전을 조절하는 Quaternion을 생성합니다.
  1. tr.position = Vector3.SmoothDamp(...)
    1. 이 부분은 카메라의 위치를 부드럽게 이동시키는 역할을 합니다. Vector3.SmoothDamp 함수는 세 개의 인자와 하나의 출력 변수를 받습니다:
      • current: 현재 위치 (현재 카메라의 위치인 transform.position)
      • target: 목표 위치 (목표 대상의 위치에서 회전과 거리, 높이를 적용한 위치)
      • currentVelocity: 현재 속도 (부드럽게 이동하기 위한 속도 정보)
      • smoothTime: 부드러운 이동을 위한 시간 값
      이 함수는 현재 위치를 목표 위치로 부드럽게 이동시키는 데 사용됩니다. 이 때, 회전과 거리, 높이 정보가 고려되어 목표 위치로의 부드러운 이동이 이루어집니다.
요약하면, 해당 코드는 현재 카메라의 회전을 부드럽게 목표 대상의 회전으로 변화시키고, 그 회전 정보를 기반으로 카메라의 위치를 부드럽게 이동시킵니다. 이로써 카메라는 목표 대상을 따라다니며 일정 거리와 높이를 유지하면서 부드럽게 이동하게 제작 하였습니다.
MOS-CAMERA-SYSTEM