이전 글에 이어서 계속해보자.
작업의 편의를 위해 Layout(레이아웃)을 바꿔보자.
오른쪽에 있는 Layout (레이아웃) 버튼을 클릭한 후 2 by 3을 클릭한다.
Layout에 대해서는 <각개격파002- 편리한 작업환경 만들기>를 참고한다.
위와 같이 레이아웃을 2by3으로 바꾸면 Scene창과 Game창이 함께 보이고 Hierarchy , Project , Inspector창이 오른쪽으로 모여서 작업하기 편하다.
이제 회전 코드를 작성해보자.
이전에 만든 RotateCube 스크립트 파일을 더블클릭한다.
먼저 큐브를 X축을 기준으로 회전 시키는 코드를 만들어 보자.
RotateAxisZ (Z 축 회전)이라는 메서드(함수)에 코드를 작성한다.
회전은 transform.Rotate( ) 를 사용한다.
Vector3.forward 는 Vector3(0, 0, 1)이며 Z축 값을 1 증가한다.
여기에 float값 1.0f 를 곱하면 1이 될 것이다.
여기서 float값은 속도(speed) 값이라고 생각하자.
즉, 벡터값에 속도를 곱한 값을 Rotate(회전) 함수의 매개변수로 전달한 것이다.
그러므로 RotateAxisZ 메서드는 유니티 Rotate(회전) 속성에 Z 값이 1인 벡터 값에 속도 1을 곱한 값을 전달하는 함수이다.
이 메서드를 프레임 마다 실행하려면 Update( ) 안에 넣으면 된다.
Update( ) 메서드는 유니티에서 미리 만들어 놓은 Loop(반복)함수이다.
참고로 Update메서드 안에서는 매 프레임 마다 1번씩 update메서드 안의 코드를 순서대로 실행한다.
만약 60 프레임으로 실행된다면 1초당 60번 실행을 반복한다는 뜻이다.
'초당 프레임 수'를 FPS(frames per second)라고 한다.
60프레임인 경우 1초를 60으로 나누면 1프레임의 시간은 0.016초 정도 된다.
이 프레임 시간이 줄어들수록 게임의 오브젝트들은 움직임이 부드러워진다.
그런데 실행할 내용이 많아지면 프레임 시간이 느려지고 움직임 역시 느려지게된다.
프레임 측정 방법은 다른 글에서 알아보기로 한다.
코드를 작성하면 반드시 저장해야 한다.
File메뉴 > Save(저장) 클릭
단축키 Ctrl+S
윗쪽 실행버튼을 클릭해서 어떻게 회전하는 지 확인한다.
만약 위와 같이 Scene창과 Game창의 회전 방향이 서로 다르면 보는 방향을 Back(카메라 뒤)로 바꾼다.
위 결과로 알 수 있는 것은 Vector3.forward ( Z축을 1만큼 증가)는 앞에서 보았을 때 Z 축을 중심으로 오른쪽으로 돌리는 것과 같다는 것이다.
X축 기준으로 회전하는 메서드를 작성한다.
코드 번호 14번를 클릭해서 그 줄을 선택한다.
14번 줄을 선택한 상태에서 Ctrl + / 키를 누르면 해당 줄을 주석(comment)으로 처리할 수 있다.
주석은 코드에 설명, 메모 등을 적어 두는데 사용하며 실행되지 않는다.
다음 줄에 RotateAxisX메서드를 추가하고 저장한 후 유니티에서 실행해본다.
계속해서 Y축을 중심으로 회전해 보자.
축에 대해서 정리하면 다음과 같다.
좌표 축을 정하는 방법에는 왼손좌표계와 오른손 좌표계가 있다.
유니티는 왼손 좌표 시스템을 사용한다.
왼손을 위와 같이 만든 후 화면에 대면 X축, Y축, Z축을 중지,엄지,검지로 표현할 수 있다.
왼손 좌표계에서는 z축의 경우 멀어지면 + , 가까워지면 - 이다.
회전의 경우는 오른손으로 왼손의 각 손가락 끝(화살표 끝)을 잡은 상태에서 오른쪽으로 돌리면 + (플러스, 증가) , 왼쪽으로 돌리면 - (마이너스, 감소)한다고 생각할 수 있다.
그래서 큐브를 어떤 방향으로 회전시키고 싶을 때는 어떤 축을 어느 방향으로 돌리면 될 지 생각해 보면 어떤 Vector값을 사용하면 될 지 쉽게 알 수 있을 것이다.
처음에는 헷갈릴 수 있지만 원리를 잘 파악해서 이해하면 쉬울 것이라 생각한다.
다음 글에서는 위치의 이동에 대해 알아본다.
끝.
Wraven...
'취미로 하는 게임코딩_gameCodingAsHobby > 유니티 구현 정리_Implement Summary' 카테고리의 다른 글
유니티 각개격파_013_벡터(Vector)와 이동(Translate)_키보드 이동 (0) | 2021.06.02 |
---|---|
유니티 각개격파_012_벡터(Vector)와 이동(Translate)_좌표축 이동 (0) | 2021.05.29 |
유니티 각개격파_010_벡터(Vector)와 회전(Rotate)_B (0) | 2021.05.25 |
유니티 각개격파_009_벡터(Vector)와 회전(Rotate)_A (0) | 2021.05.24 |
유니티 각개격파_008_스크립트 편집기 설치하기 (0) | 2021.05.23 |