-
[Unity - c#]Vector3.Magnitude 활용하여 거리 구하기unity 2022. 7. 11. 16:41
Vector(백터)
백터는 쉽게 말해 크기와 방향을 갖는 물리량이다.
크기와 방향을 갖는다는 것은 시작 지점과 끝 지점이 존재한다는 뜻으로,
백터의 크기는 시작 지점에서 끝 지점 사이의 값이라고 생각하면 된다.
Vector2, 3은
2차원(x, y) 3차원(x, y, z)의 차이만 있을 뿐, Magnitude를 활용하는데 크게 다르지 않음을 미리 숙지 해야 한다.
Magnitude(규모)
시작과 끝이 존재 한다는 것은 그 안에 크기(또는 길이)가 생긴다는 것이고,
그 크기를 가르키는 것이 Magnitude(규모)가 된다.
유니티에서 magnitude를 사용할 때 float형으로 변환된다.
Magnitude 정의
//인자로 들어온 벡터의 길이를 반환한다. public float magnitude(Vector3 vector) //인자로 들어온 벡터의 길이의 제곱한 값을 반환한다. public float sqrMagnitude(Vector3 vector)
위 정의 중 sqrMagnitude가 더 빠르게 계산하므로 거리 계산 시 sqrMagnitude을 활용하는 편이 유용하다.
Magnitude를 사용하여 거리 구하기
private void OnCollisionEnter(Collision collision) { //설명 a코드 Vector3 head = collision.transform.position - transform.position; //설명 b코드 float dis = head.magnitude; }
유니티에서 콜라이더가 서로 닿았을 때 이벤트를 처리하는 함수로 닿을 물체와의 거리를 계산한다.
코드 설명
a 코드
Vector3 head = collision.transform.position - transform.position;
ㄱ. collision.transform.position은 이 코드가 적용된 오브젝트와 닿은 물체의 위치 값이고
ㄴ. transform.position은 이 코드가 적용된 오브젝트의 위치 값을 말한다.
ㄱ에서 ㄴ을 뺐을 때 좌표 값이 head에 저장된다.
예시)
ㄱ이 (1, 5, 5)
ㄴ이 (5, 5, 5)일 경우 head의 값은 (-4, 0, 0)이 된다.
b 코드
float dis = head.magnitude;
Vector3인 head에 magnitude를 적용하면 float형으로 바뀌므로 변수 앞에 float을 선언한다.
예시)
head(x, y, z)를 각각 제곱한 뒤 더하여 제곱근으로 처리한 결과로
head(-4, 0, 0)를 magnitude로 변환 하면 4로 변환된다.
주의 사항
오브젝트의 크기에 따라 거리 값이 달라 질 수 있는데,
크기에 따른 중심점끼리 비교 값이 달라 지기 때문이다.
A와 같이 중심점과 가깝게 부딪힐수록 거리 값은 0에 가까우며,
B와 같이 멀어질수록 거리가 높게 측정된다.
'unity' 카테고리의 다른 글
[unity]C# Parent 사용 시 경고 메세지 (0) 2022.07.18 [Unity]C# - Random에 관하여 (0) 2022.07.15 [unity] - [System.Serializable]은? (0) 2022.04.17 [unity - c#] : MonoBehaviour은 왜 있는 거지? (0) 2022.04.17 [Unity(c#) - instance] 단순하게 생각하기 (0) 2022.04.08