Ad Block 한번만 꺼주시면 안될까요..?
게임 개발/게임수학

유니티) 2, 3차원에서 적용 가능한 벡터의 정규화 방법.

UniCoti(유니코티) 2022. 11. 18.

위치를 이동시키는 코드를 짜 본 사람이라면

누구나 공감할만한 주제가 하나 있다.

 

그것은 바로 대각선으로 이동할 때 빠르게 간다는 것이다.

상하좌우로 움직이는 코드를 만들었다면,

 

상 또는 하 키와 동시에 좌 또는 우 키를

동시에 누르면,

 

직관적으로 봤을 때조차 이동속도가 차이 나는 걸 느낄 수 있다.

눈으로 보이게 차이가 난다면 그건 심각한 정도의 차이이기에,

위나 아래로 가면 1의 속도, 대각선으로 가면 1.414의 속도(피타고라스)

우리는 이걸 고칠 방법을 항상 고민하게 된다.

아마 이 주제에 대해 몇 번 찾아본 사람이라면 

이 주제에 대한 정답인 VectorN.normalized라는 메서드를 알 텐데,

 

사실이게 정답이긴 하다.

normalized라는 기능은

벡터의 길이(magnitude)를 1로 만들어서

가하는 힘을 1로 고정시키고,

방향만을 결정하는 벡터가 되도록 변경해주는 기능인데,

(이걸 수학에선 단위 벡터라고 한다.)

 

https://alpaca-code.tistory.com/128(단위 벡터 직접 만들기)

 

단위 벡터로 만들기. 벡터 크기 1로 만들기. 벡터의 정규화 하는법.

제목으로 보이다시피, 이 글에서는 한 벡터를 단위 벡터(크기가 1인 벡터)로 만드는 과정을 설명하려 한다. 먼저 알아둬야 할 사전지식이 있는데, 공식을 담을 사진에서 쓸 기호이다. 그 기호는 |

alpaca-code.tistory.com

 

특히 2D 게임에서, normalized를 썼음에도 

정규화가 안 되는 경우가 종종 있다.

 

유튜버 골드 메탈님의 친절한 답변을 토대로

2D 게임에서의 normalized가 되지 않는 경우의

해결법을 제시하겠다.

 

사실 이 문제는 2D 게임은 3D 게임을 원근 없이 

본 것과 같아서 일어나는 문제이다.

좌표계 또한 동일하기 때문에 

2D 게임에선 쓰지 않는 Z 축은 실제로 남아있는데,

Z 축 때문에 이러한 문제가 일어난다.

 

그러니 이 Z 축을 0으로 만들어 주거나

하는 등의 조치로 이 문제를 예방해주면 된다.


도움이 되었길 바라며

 

끝.

댓글

💲 추천 글