상세 컨텐츠

본문 제목

유니티 내위치에서 타겟으로 Y축 회전하기

유니티/기능

by MJ_119 2025. 1. 25. 12:14

본문

유니티 내위치에서 타겟으로 Y축 회전하기

 

public Quaternion FaceTarget(Vector3 target)
    {
        // 객체가 target을 바라보도록 하는 회전값
        Quaternion targetRotation = Quaternion.LookRotation(target - transform.position);

        // 현재 회전 각도 가져오기
        Vector3 currentEulerAngels = transform.rotation.eulerAngles;

        // y축 회전 보간
        float yRotation = Mathf.LerpAngle(currentEulerAngels.y, targetRotation.eulerAngles.y, trunSpeed * Time.deltaTime);

        return Quaternion.Euler(currentEulerAngels.x, yRotation, currentEulerAngels.z);
    }

 

 

Quaternion targetRotation = Quaternion.LookRotation(target - transform.position);

target - transform.position은 목표 위치와 현재 객체의 위치 간의 방향 벡터를 계산합니다.
Quaternion.LookRotation은 이 방향 벡터를 기반으로 목표를 바라보는 회전을 생성합니다. 

즉, targetRotation은 객체가 target을 바라보도록 하는 회전값입니다.

 

Vector3 currentEulerAngels = transform.rotation.eulerAngles;

transform.rotation은 현재 객체의 회전을 나타내는 Quaternion입니다.
eulerAngles는 이 회전을 오일러 각도로 변환하여 반환합니다. 

오일러 각도는 일반적으로 (x, y, z) 축에 대한 회전을 나타냅니다.

 

float yRotation = Mathf.LerpAngle(currentEulerAngels.y, targetRotation.eulerAngles.y, trunSpeed * Time.deltaTime);

Mathf.LerpAngle는 두 각도 사이를 선형 보간하여 부드럽게 회전하도록 합니다.
currentEulerAngels.y는 현재 y축 회전 각도이고, targetRotation.eulerAngles.y는 목표 회전의 y축 각도입니다.
trunSpeed * Time.deltaTime은 보간의 비율을 결정합니다. 

trunSpeed는 회전 속도를 조절하는 변수이며, Time.deltaTime을 곱함으로써 프레임 독립적인 회전을 보장합니다.

 

return Quaternion.Euler(currentEulerAngels.x, yRotation, currentEulerAngels.z);

마지막으로 x축과 z축의 회전은 현재 각도를 유지하고, y축 회전만 보간된 yRotation으로 업데이트합니다.
최종적으로 이 메서드는 목표를 향해 부드럽게 회전하는 Quaternion을 반환합니다.

관련글 더보기