본문 바로가기

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

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

게임에서는 보통 Player(플레이어)라는 게임오브젝트를 조종하여 게임을 풀어나간다.

일반적으로 플레이어는 움직일 수 있어야 한다.

 

유니티에서는 3D의 움직임을 Coordinates(좌표)에 나타낼 수 있는 Vector(벡터)를 사용한다.

Vector(벡터)는 3D모델, 텍스처, 조명 등에도 사용하기 때문에 Vector(벡터)를 이해하는 것이 기본이 된다고 할 수 있다.

 

유니티에서 게임오브젝트를 만들면 아래 그림처럼 기본적으로 transform (변형) 컴퍼넌트를 가지고 있다.

그 속성을 보면 position(위치), rotation(회전), scale(크기) 가 있는데 여기에 벡터 X , Y , Z 좌표의 값을 사용하고 있다.

 

 

소감 한마디 덧붙이면, 요새는 어제 배운걸 오늘 잊어먹는 악순환이 반복되고 있는데 반해, 수 십년 전에 배웠던 벡터와 피타고라스 정리는 아직도 기억하고 있는 걸 보면 역시 공부는 어릴 때 부터 학창 시절에 해야 한다는걸 새삼 느끼게 된다.

 

여기서는 유니티에서 벡터와 좌표가 어떻게 사용되는지 알아본다.

 

Vector는 공간의 한 곳에서 다른 곳까지 이동을 나타내는 물리적 표현법이다.

이 벡터를 좌표에 나타낼 수 있다.

 

x축, y축만 있다면 2차원(two-dimensional ; 2D)이며 Vector2 ( x , y ) 로 나타낼 수 있다.

x, y, z 축이 있다면 3차원(3D)이며 Vector3 ( x , y , z )로 나타낼 수 있다.

 

Vector는 direction(방향)과 magnitude(크기)라고도 부르는 distance(거리)를 가지고 있다.

magnitude(크기)가 1인 Vector를 normalized 라고 한다.

 

*normalize ; 정규화, 표준화 하다.

 

벡터에 대해 2차원 평면으로 간단하게 정리해본다.

 

UFO가 금덩어리를 가지러 간다고 해보자.

위 배경 이미지를 좌표라고 생각할 때 현재 UFO의 x, y 위치는 (2 , 5)라고 할 수 있다.

좌표 위를 이동하는 방법은 여러 가지다.

예를 들면 '오른쪽으로 3칸 , 아래로 4칸 이동'으로 표현할 수 있다.

즉, (2+3 , 5+0) 로 이동한 후 (5+0, 5-4) 로 이동하게 되므로 금덩어리가 있는 위치는 (5, 1)이 된다.

 

위 그림에서 빨간선인 UFO에서 금덩어리 까지 Vector(벡터)의 magnitude(길이, 거리)를 구할 수도 있다.

이 길이는 '피타고라스 정리'를 변형하면 구할 수 있다.

 

즉, 위와 같이 계산하면  벡터의 magnitude(길이)는 5이다.

 

코드를 작성하다 보면 벡터의 길이가 1인 경우가 필요하다.

이것을 단위벡터(unit vector)라고 한다.

 

위의 예에서 x축으로 +3 , y 축으로 -4 이동한 벡터의 길이가 5 이므로 벡터 길이가 1인 벡터를 구할 수 있다.

3을 길이 5로 나누고, -4를 길이 5로 나눈 값이 단위벡터 좌표가 될 것이다.

 

(3 / 5 , -4 / 5) = (0.6 , -0.8)

 

 

이런 계산을 코드에서 normalized 를 사용하면 같은 방향을 가리키면서 길이가 1인 단위 벡터를 자동으로 만들어 준다.

이것 뿐만 아니라 유니티에 이미 만들어져 있는 함수들을 사용하면 수학, 물리와 관련된 계산을 손 쉽게 구현할 수 있으므로 어떤 함수들을 어디에 적용할 지 열심히 외워두면 된다.

 

 

여기까지 정리하고 유니티에서 계속 알아본다.

 

유니티 허브를 실행하고 3D 프로젝트를 하나 만든다.

 

기본 화면이라면 위와 같이 나타날 것이다.

 

왼쪽 Hierarchy창에 있는 게임오브젝트인 Main Camera(메인카메라)를 선택해보자.

가운데 Scene(화면, 씬)창에 메인카메라의 3D 좌표를 나타내는 세 축이 화살표 모양으로 나타난다.

x축은 빨간색, y축은 녹색, z 축은 파란색으로 표시된다.

오른쪽 위에는 씬 화면을 축 별로 다양하게 볼 수 있도록 Gizmos(기즈모)라는 도구를 제공하고 있다.

 

오른쪽 아래애 메인카메라로 보는 화면이 조그맣게 나타난다.

이 화면은 Scene(씬) 탭 옆에 있는 Game(게임)탭을 클릭해서 보는 화면과 같다.

 

중요한 점은 Scene(씬) 화면에서 보는 화면은 Game(게임)탭의 화면과 다르다는 것이다.

즉, Scene 화면은 작업하는 사람이 보는 화면이므로 앞으로 보든, 뒤로 보든 필요에 의해 조정할 수 있는 작업 화면이고,

Game탭의 화면메인카메라가 보는 화면이며 실제 게임 화면이기도 하다.

 

Scene화면에 있는 도구 모음 중에서 2D 버튼을 클릭하면 2D와 3D 보기로 바꿀 수 있다.

 

기즈모에서 마우스 오른쪽 버튼을 클릭해서 현재 Free(자유)로 되어 있는 보기 설정을 Front(정면) 보기로 클릭해보자.

계속해서 Right(오른쪽), Top(윗쪽), Left(왼쪽), Bottom(아래쪽), Back(뒷쪽)에서 보기를 각각 눌러서 어떻게 보이는 지 확인해 보자.

 

마우스 가운데 휠버튼을 굴리면 줌인, 줌아웃 할 수 있다.

 

아무것도 없는 씬 화면에 바닥으로 사용할 게임오브젝트를 하나 만든다.

Hierarchy창 빈곳에서 마우스 오른쪽 클릭 후 3D Object > Plane(평면)을 클릭한다.

 

현재 카메라 뒤에서 보는 화면 앞에 평면이 하나 만들어진다.

 

만약 잘 안보이면 마우스 포인터를 씬 화면 안에 두고 마우스 휠 버튼을 누른 채로 살짝 아래로 내리거나 마우스 오른쪽 버튼을 클릭한 채로 움직이면 위와 같이 평면의 윗부분이 보일 것이다.

 

Plane을 선택한 후 Inspector창의 Transform에 있는 점3개 옵션을 클릭한 후 Reset을 클릭한다.

Position(위치)를 모두 리셋해서 0으로 만들 수 있다.

 

흰색 Plane(평면)이 x, y, z 축 0의 위치에 만들어질 것이다.

Project창에 있는 Assets를 선택한 후 마우스 오른쪽 클릭하고 Create > Folder(폴더)를 클릭해서 새 폴더를 하나 만든다.

폴더 이름을 Materials 로 바꾼다.

이 폴더 안에는 게임오브젝트의 material(재료, 재질)를 모아 두는 곳으로 사용한다.

 

Materials폴더를 선택한 후 오른쪽 폴더 안에서 마우스 오른쪽 클릭 > Create > Material 클릭으로 새 material (재질)을 만든다.

파일 이름을 MatPlane 으로 바꾼다.

Mat은 Material인 것을 알아보기 위해 세글자만 사용한다.

 

MatPlane을 선택한 후 오른쪽 Inspector창에서 Albedo 속성의 색 선택 아이콘을 클릭한 후 마음에 드는 색을 선택한다.

 

만든 MatPlane을 씬 화면에 있는 Plane에 또는 Hierarchy창의 Plane에 마우스로 끌어서 놓으면 적용할 수 있다.

 

 

계속해서 같은 방법으로 3D 오브젝트 > Cube(큐브)를 하나 만든다.

 

큐브 역시 Inspector창의 Transform에 있는 옵션을 클릭한 후 Reset을 클릭하여 Position(위치)를 모두 0 으로 만든다.

흰색 큐브가 x, y, z 축 0의 위치에 만들어졌다.

 

이 큐브도 Plane과 마찬가지로 material을 만들어서 재료를 입혀주자.

 

이름은 MatCube로 하고 마음에 드는 색으로 만든다.

 

MatCube를 큐브에 적용하면 다음과 같이 완성될 것이다.

 

 

다음 글에서 계속...

 

Wraven...