유니티를 사용하다보면 움직임이나 마우스 포인트 등 어떠한 행동을 요할 때 Vector2 또는 Vector3가 많이 쓰인다.
그러면 이 Vector라는게 뭔지 알아보도록 하자.
Vector 는 크기와 방향을 가지는 물리량을 의미한다고 한다. 이를 좌표값으로 받아 해당 위치에 배치하거나 이동하는 것이 가능하다.
1. 벡터의 더하기
간단하다. 두개의 좌표 (Ax, Ay) , (Bx, By) 가 존재한다면 이 둘의 합은 (Ax + Bx , Ay + By) 가 된다.
2. 백터의 빼기
벡터의 빼기는 마찬가지로 두 개의 좌표를 빼게 된다면 (Ax - Bx , Ay - By) 와 같은데 이는 B -> A를 쫓아가는 모습으로 그려진다.
게임으로 치면 몬스터 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는 반대로 크기만 필요한 경우에 사용된다. 서로 다른 방향이 있다면 이를 무시하고 벡터들의 크기만을 비교할 경우에 사용된다.
'Unity' 카테고리의 다른 글
RayCast 에 대해서 (RayCastHit2D) (1) | 2023.12.04 |
---|---|
[프로그래머스] 삼총사 C# (0) | 2023.12.01 |
[Unity] GameManager 를 통해 Scene 아이디 주고받기 (TextMeshPro) (4) | 2023.11.28 |
Unity 2D 캐릭터 움직임 주기 (2) | 2023.11.27 |
New Input System (3) | 2023.11.24 |