Unity DOTS/TIP

UNITY DOTS - 거리 계산하기

개양반 2022. 11. 25.
728x90

Unity DOTS 에서 수학 패키지로 using Unity.Mathematics를 사용해야 한다.

using Unity.Mathematics에서 제공하는 오브젝트 간의 거리를 계산하는 함수에는 math.distance와 math.distancesq 2개가 존재한다. 

1. math.distance

정확한 거리를 계산할 때 사용한다. 두 점간의 제곱 거리에 루트를 한 값이라 컴퓨터 성능에 악영향을 끼친다.

컴퓨터는 나누셈 연산에 잼병이다.

math.distance(AEntity의 위치, BEntity의 위치);

 

2. math.distancesq

정확한 거리를 측정할 때는 좋지 않지만 루트 연산을 하지 않으므로 성능에 좋다.

위 Distance의 거리 계산에서 루트 계산을 하지 않은 두 점 사이의 제곱 거리를 반환한다. 

math.distancesq(AEntity의 위치, BEntity의 위치)

 

2-1 math.distancesq 예제

math.distancesq 는 제곱 거리를 반환하므로 비교 대상의 길이도 비교를 할 때는 벡터에 제곱을 해야 한다.

벡터의 거리를 제곱하는 함수로는 math.lengthsq 가 있다.

 

public float VisionMaxDistance = 5.0f;

public partial class SampleSystem : SystemBase
{
	 
     protected override void OnUpdate()
     {
       .. 코드 생략..
        var distancesq = math.distancesq(EntityAspect.transform.position, PlayerAspect.transform.position);
        if(math.lengthsq(VisionMaxDistance) < distancesq)
        {
            // distancesq 의 값이 거리의 제곱을 반환한다.
            // 비교할 거리 VisionMaxDistance 도 제곱한 값이 되어야 한다.
            // math.lengthsq 는 전달받은 백터의 길이를 제곱한 값을 반환한다.
        }
     }
}

 

댓글

💲 추천 글