카테고리 없음

[유니티]Unity에서 오브젝트를 특정 대상이 있는 방향으로 쳐다보게 만드는 방법

Bit by Bit 2024. 11. 23. 23:56
728x90

 Unity에서 오브젝트가 특정 대상을 쳐다보게 만드는 방법은 게임 개발에서 자주 사용하는 기능입니다. 예를 들어, 적 AI가 플레이어를 바라보거나, 카메라가 특정 지점을 따라가도록 설정할 때 사용됩니다. 이번 포스팅에서는 Transform.LookAt() 메서드를 활용한 기본 구현부터 축 제한, 부드러운 회전에 이르기까지 다양한 방법을 다뤄보겠습니다.


1. 기본 구현: Transform.LookAt()

 Transform.LookAt()은 오브젝트를 특정 대상 방향으로 회전하게 만듭니다. 간단한 예제는 아래와 같습니다.

using UnityEngine;

public class LookAtTarget : MonoBehaviour
{
    public Transform target; // 바라볼 대상

    void Update()
    {
        if (target != null)
        {
            transform.LookAt(target);
        }
    }
}

코드 설명:

  • target: 바라볼 대상의 Transform을 할당합니다. (예: 플레이어, 특정 오브젝트 등)
  • transform.LookAt(): target을 향해 현재 오브젝트의 방향을 설정합니다.
  • Update(): 매 프레임마다 실행하여 지속적으로 대상을 쳐다보게 합니다.

2. 특정 축만 고정하고 바라보기

 3D 공간에서는 모든 축을 회전하지 않고 특정 축(예: Y축)을 고정하거나 제한해야 할 때가 있습니다. 예를 들어, 캐릭터가 고개만 움직여 목표를 쳐다보도록 하려면 Y축 회전을 고정해야 합니다.

using UnityEngine;

public class LookAtTargetWithYAxis : MonoBehaviour
{
    public Transform target;

    void Update()
    {
        if (target != null)
        {
            // 목표 방향 계산 (Y축만 고려)
            Vector3 direction = target.position - transform.position;
            direction.y = 0; // Y축 고정

            // 회전 설정
            transform.rotation = Quaternion.LookRotation(direction);
        }
    }
}

결과:

이 코드로 오브젝트는 Y축(수평 방향)만 고려하여 목표를 바라봅니다. 이를 통해 현실적인 회전 효과를 구현할 수 있습니다.


3. 부드럽게 회전하기

LookAt() 메서드는 즉각적으로 방향을 설정하기 때문에, 회전이 자연스럽지 않을 수 있습니다. 이를 해결하려면 Quaternion.Slerp() 또는 Quaternion.RotateTowards()를 활용해 부드럽게 회전하도록 설정할 수 있습니다.

using UnityEngine;

public class SmoothLookAtTarget : MonoBehaviour
{
    public Transform target;
    public float rotationSpeed = 2.0f; // 회전 속도

    void Update()
    {
        if (target != null)
        {
            // 목표 방향 계산
            Vector3 direction = target.position - transform.position;

            // 목표 회전값 계산
            Quaternion targetRotation = Quaternion.LookRotation(direction);

            // 부드럽게 회전
            transform.rotation = Quaternion.Slerp(transform.rotation, targetRotation, Time.deltaTime * rotationSpeed);
        }
    }
}

코드 설명:

  • Quaternion.Slerp(): 현재 회전값과 목표 회전값 사이를 부드럽게 보간합니다.
  • rotationSpeed: 회전 속도를 조절하여 자연스러운 움직임을 설정합니다.

4. 활용 예시

이 기능은 다양한 게임플레이 상황에서 활용됩니다:

  • 적 AI: 플레이어를 추적하거나 공격 대상을 바라보게 함.
  • 카메라 시스템: 특정 오브젝트를 중심으로 카메라가 회전.
  • NPC 애니메이션: NPC가 플레이어를 따라 바라보며 상호작용.

5. 정리

 Unity에서 오브젝트를 쳐다보게 만드는 방법은 LookAt()을 기반으로 다양한 확장이 가능합니다.

  • 즉각적인 회전: LookAt() 메서드.
  • 축 고정: Y축 또는 다른 축을 제한하는 방식.
  • 부드러운 회전: Quaternion.Slerp()를 활용한 자연스러운 동작.
728x90