반응형
이전 게시글에서 내각을 이용해 두 물체간의 각도를 구하는 방법에 대해서 설명했습니다.
이번 글에서는 Vector3.SignedAngle() 함수를 이용해 시야 범위에 타켓 오브젝트가 들어와 있는지 확인하는 방법을 설명하겠습니다.
Vector3.SignedAngle() 함수
Vector3.SignedAngle() 함수는 두 벡터의 방향 사이의 각도를 구하는 함수입니다. 이 함수는 부호가 있는(-180 ~ 180)각도를 반환합니다.
float SignedAngle(Vector3 from, Vector3 to, Vector3 axis)
//from: 시작 벡터
//to: 목표 벡터
//axis: 회전 축 벡터
이 함수는 두 벡터 from과 to의 방향 사이의 각도를 axis를 기준으로 계산하며, 결과값은 부호를 가지는 각도입니다
예제 코드
다음은 시야 범위에 타켓 오브젝트가 들어와 있는지 확인하는 예제 코드입니다.
bool IsTargetInSight(float range)
{
Vector3 direction = target.transform.position - transform.position;
//transform의 Y축 기준으로 transform의 정면과 방향 사이의 각을 계산합니다
float angle = Vector3.SignedAngle(transform.forward, direction, transform.up);
if(Mathf.Abs(angle) > range) return false;
return true;
}
이 코드에서 range는 시야 범위의 각도를 나타내는 값입니다.
결론
Vector3.SignedAngle() 함수를 이용하는 방법은 오브젝트의 시야 범위에 타켓 오브젝트가 들어와 있는지 확인하는 간단하고 효과적인 방법입니다.
'Unity' 카테고리의 다른 글
Unity의 Collision에 관하여 (0) | 2023.11.30 |
---|---|
Unity의 PointEventData 클래스 (0) | 2023.11.27 |
Vector3 : Lerp, SmoothDamp, MoveTowards 비교 (0) | 2023.11.23 |
헷갈리는 오브젝트 회전 방법 Part 2 (Lerp, Slerp, RotateTowards) (0) | 2023.11.22 |
시야 범위에 타켓 오브젝트가 들어와 있는지 확인하는 방법 (0) | 2023.11.21 |