본문 바로가기

취미로 하는 게임코딩_gameCodingAsHobby/유니티 구현 정리_Implement Summary

유니티 각개격파_010_벡터(Vector)와 회전(Rotate)_B

이전 글 마지막에 Cube를 만들었는데 바닥 아래로 반쯤 내려간 것을 볼 수 있다.

 

 

이것은 plane(평면)의 position(위치)가 (0, 0, 0)이고 Cube 역시 같은 위치이기 때문에 큐브의 반은 평면 아래로 내려가 있는 상태이다.

 

큐브를 위로 올리려면 녹색인 Y축 값을 올리면 되겠다.

왼쪽 이동 도구를 클릭하고 녹색 화살표를 위로 움직이면 position Y값을 조정할 수 있다.

먼저 화살표로 적당한 위치로 이동한 후 정확하게 맞출려면 숫자를 직접 수정하면 된다.

 

화살표를 건드리기 귀찮으면 Y 글자에 마우스를 갖다 대면 좌우 표시가 뜨는데 이때 마우스를 클릭한 채로 움직이면 숫자를 조정할 수도 있다.

 

위의 경우는 Cube의 Y축 중심은 중앙이므로 0.5만큼 올려주면 본래 모습을 볼 수 있다.

 

다른 도구들도 선택해서 각 축 별로 움직여 보면 어떤 기능인지 파악할 수 있다.

하다가 이상하게 변하면 Ctrl + Z키로 다시 되돌릴 수 있으므로 무조건 이것 저것 조정해 보는 게 구조를 익히는 가장 빠른 방법이다.

 

회전 도구를 클릭하면 Gizmos(기즈모)와 색 위치가 다른 것을 알 수 있다.

회전은 각 축을 중심으로 돌아가기 때문이다.

 

쉽게 생각하면, 축에 꼬챙이를 끼워서 돌린다고 생각하면 된다.

위와 같은 경우 Y축 방향으로 검은색 봉을 꽂고 손으로 돌린다고 생각해보자.

그러면 회전하는 방향은 녹색 둥근원을 따라 오른쪽 아니면 왼쪽으로 돌릴 수 있다.

 

회전 실습을 해보자.

 

회전 실습을 위해 큐브를 위로 1만큼 이동한다.

즉, 큐브 position의 Y값을 1로 한다.

 

여기서 position(위치) 값에 대해 잠시 알아보자.

Inspector창을 보면 위와 같이 되어 있을 것이다.

이 큐브의 Position(위치)는 현재 X 0, Y 1, Z 0 값을 가지고 있다.

이것을 Vector(벡터) 문자로 표현하면 다음과 같다.

 

Vector3 (0, 1, 0)

 

이것의 다른 표현도 있다.

 

Vector3.up

 

유니티에서 up(위로)은 'Y축으로 1 만큼 더한 값' 이라는 뜻으로 사용했다.

 

반대로 'Y축으로 1만큼 뺀 값'은 down(아래로)을 사용한다.

즉, Vector3.downVector3 (0, -1, 0)과 같다.

 

X축으로 1만큼 이동하는 것은 right(오른쪽) , left(왼쪽)를 사용한다.

Z축으로 1만큼 이동하는 것은 forward(앞으로) , back(뒤로)을 사용한다.

 

Z축 값이 헷갈릴 수 있는데 forward는 멀어지고, back은 가까워진다.

이것은 카메라가 보는 시점이 기준이다.

위 그림은 현재 카메라 뒤(Back)에서 보고 있는 상태이므로 Z축 값을 더하면 멀어지고,

빼면 가까워진다.

 

그러므로 위와 같이 기즈모에서 Back(뒤에서 보는 시점)으로 설정하면 카메라가 보는 시점과 작업자가 보는 시점이 같아지므로 작업할 때 헷갈리지 않는다.

 

추가로 각 축 값을 모두 1로 정하는 표현도 있는데 특히 이것을 normalized vector(정규화,표준화된 벡터)라고 한다.

그래서 3가지 표현법이 있다.

 

Vector3.one 

Vector3 (1, 1, 1)

Vector3.nomalized

 

주의할 점은 Vector3.nomalized는 같은 방향을 유지하고 길이가 1인 변하지 않는 벡터로 만든다는 점이다.

 

또한 각 축 값을 모두 0로 정하는 표현도 있다.

Vector3.zero

Vector3 (0, 0, 0)

 

여기서는 대충 이 정도로 기억하고 나중에 코드 작업할 때 어떻게 사용하는 지 알아본다.

다시 본론으로 돌아와서 회전 도구를 클릭하면 위와 같은 모양이 될 것이다.

각 축별로 빨간색, 초록색, 파란색을 마우스로 시계방향, 반시계방향으로 끌어본다.

동시에 오른쪽 Inspector창의 rotation값이 어떻게 변하는 지 확인한다.

 

큐브를 어떤 방향으로 회전하려면 어떤 축의 값을 변화시켜야 하는 지 알 수 있을 것이다.

 

 

이제 회전을 스크립트로 작성해서 구현해 본다.

 

Project창에서 Assets를 클릭한 후 그 안에 새 폴더를 하나 만든다. (마우스 오른쪽 클릭 > Create > Folder 클릭)

폴더명을 Scripts (스크립트)라고 바꾼다.

 

큐브를 회전시킬 것이므로 큐브를 선택한 상태에서 Inspector창 제일 아래에 있는 Add Component (컴퍼넌트 추가)버튼을 클릭하고, 다시 아래로 내려와서 New script를 클릭한다.

 

스크립트명을 RotateCube (큐브를 회전하다)라고 붙이자.

이렇게 하면 스크립트 파일을 큐브에 직접 Component(컴퍼넌트)로 붙일 수 있다.

 

참고로 스크립트 파일을 게임오브젝트에 붙이는 다른 방법도 있다.

스크립트 파일을 Scripts폴더 안에 먼저 만든 후 Hierarchy창에 있는 게임오브젝트(여기서는 Cube) 또는 Inspector창에 마우스로 끌어서 붙여 넣어도 된다.

 

나는 스크립트 파일을 만든 후 붙여 넣는걸 자꾸 잊어버려 위와 같이 해당 오브젝트의 Inspector창에서 Add Component버튼으로 추가하는 방법을 선호한다.

 

위와 같이 붙여넣으면 Assets폴더에 새 스크립트가 만들어진다.

이 스크립트를 스크립트를 모아놓을 Scripts폴더로 옮긴다.

큐브에 스크립트가 컴퍼넌트로 추가된 상태에서 스크립트를 작성하거나 편집하려면 오른쪽 세점을 클릭하고 Edit Script를 클릭하면 된다. 또는 Scripts폴더에 가서 해당 파일을 더블클릭해도 된다.

 

스크립트 파일을 더블클릭하면 위와 같이 스크립트 편집기가 뜨면서 유니티에서 사용할 수 있는 기본 상태의 코드가 작성되어 있을 것이다.

 

스크립트 편집기에 대해서는 <유니티 각개격파008 - 스크립트 편집기 설치하기>를 참고하기 바란다.

 

 

다음 글에서 계속.

Wraven...