3D 환경에서는 LookAt 함수나 RotateTowards 함수를 이용해서 특정 오브젝트 방향으로 회전할 수 있지만 이 함수들은 2D 환경에서는 작동하지 않습니다.
아래의 코드는 2D 환경에서 특정 오브젝트 방향으로 회전하는 코드입니다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class LookAt2DSource : MonoBehaviour
{
public GameObject destination;
float angle;
void Update()
{
angle = Mathf.Atan2(destination.transform.position.y - transform.position.y,
destination.transform.position.x - transform.position.x)
* Mathf.Rad2Deg;
transform.rotation = Quaternion.Euler(0, 0, angle - 90);
}
}
angle = Mathf.Atan2(destination.transform.position.y - transform.position.y, destination.transform.position.x - transform.position.x) * Mathf.Rad2Deg;
destination의 좌표에서 자신의 좌표를 빼면 자신에서 destination을 향하는 벡터가 되는데 Mathf.Atan2 함수는 그 벡터의 y와 x값을 이용해서 각도를 반환합니다.
Mathf.Atan2 함수의 반환값은 일반적으로 사용하는 오일러 각도가 아닌 라디안 값이므로 Mathf.Rad2Deg 값을 이용해서 오일러 각도로 변환해 줍니다.
transform.rotation = Quaternion.Euler(0, 0, angle - 90);
유니티는 내부적으로 쿼터니언을 이용해서 각도를 표현하고 있기 때문에 Quaternion.Euler함수를 이용해 줍니다.
바라보게 하고 싶은 오브젝트가 오른쪽에 위치했을 때 angle의 값은 0이고 위쪽을 바라보게 되므로 90만큼 빼주어서 바라보게 하고 싶은 오브젝트를 정면으로 바라볼 수 있게 해 줍니다.
'Unity' 카테고리의 다른 글
Unity Awake OnEnable Start 정리 (0) | 2023.03.21 |
---|---|
Unity Button Animation 정리 (1) | 2023.03.19 |