Unity

[Unity] 벡터 및 계산

박도치 2023. 11. 29. 17:42

 

유니티를 사용하다보면 움직임이나 마우스 포인트 등 어떠한 행동을 요할 때  Vector2 또는 Vector3가 많이 쓰인다. 

 

그러면 이 Vector라는게 뭔지 알아보도록 하자.

 

Vector 는 크기와 방향을 가지는 물리량을 의미한다고 한다. 이를 좌표값으로 받아 해당 위치에 배치하거나 이동하는 것이 가능하다.

 

 

1. 벡터의 더하기

 간단하다. 두개의 좌표 (Ax, Ay) , (Bx, By) 가 존재한다면 이 둘의 합은 (Ax + Bx , Ay + By) 가 된다.

 

출처: http://allthatmath.com/bbs/board.php?bo_table=sub_113&wr_id=362

 

2. 백터의 빼기

벡터의 빼기는 마찬가지로 두 개의 좌표를 빼게 된다면 (Ax - Bx , Ay - By) 와 같은데 이는 B -> A를 쫓아가는 모습으로 그려진다.

 

출처: https://datascienceschool.net

 

게임으로 치면 몬스터 M이 플레이어 P를 쫓아오는 모습을 생각하면 P의 좌표와 M의 좌표를 구해 P - M을 하면 플레이어를 쫓아가는 벡터의 크기를 구할 수 있게 된다.

 

 

3. 벡터의 곱하기

벡터를 곱하는 건 방향을 제어할 수는 없고 벡터의 크기를 늘릴 수 있다.

 

(2, 0)이라는 A 좌표가 있다면 여기에 2를 곱하면 (Ax * 2 , Ay * 2) 가 되어 (4, 0) 이 된다. 즉 방향이 바뀌지는 않았고 길이(크기) 가 커진것이다. 다시말해 1초만에 (2, 0) 과 (4, 0) 의 거리를 간다고 생각하면 속도가 두배로 빨라졌다는 걸 알 수 있다. 이를 통해 플레이어 혹은 몬스터에게 속도를 주고, 벡터값에서 속도를 곱한다면 그만큼의 속도로 물체가 이동하는 것처럼 보이게 된다.

 

4. 활용

 

(1) normalized

 

어느 좌표상의 몬스터 M 과 플레이어 P가 있다면 P - M 을 했을 경우 몬스터가 플레이어에게로 향하는 방향과 그 크기를 알 수 있다고 했다. 하지만 몬스터 마다 크기도 다르고 속도 및 수치계산이 쉽지가 않다. 

 

속도를 계산하는데 있어서 앞서서 말했듯이 방향은 필요없고 크기에 높은 수를 곱해주면 더 빠른 속도로 움직일 수 있다고 했다. 그렇다면 방향은 유지하고 크기를 1로 두어 여기에 곱해서 속도를 구하면 더 편해지지 않을까?

 

그래서 사용되는것이 바로 normallized이다. 이는  크기를 정규화하여 1로 만들어주는 역할을 한다. 이러한 것을 단위벡터라고 부른다. 이러면 방향값만 얻어오면 속도만 곱해서 쉽게 속도를 계산할 수 있게된다.

 

(2) magnitude

magnitude는 반대로 크기만 필요한 경우에 사용된다. 서로 다른 방향이 있다면 이를 무시하고 벡터들의 크기만을 비교할 경우에 사용된다.