01
04
728x90

이전 포스팅인 안드로이드로 플랫폼 스위칭 후 이어지는 내용이다.

 

스위칭했으면 Game창의 Free Aspect라고 쓰여있는 부분을 눌러서 원하는 해상도와 가로, 세로를 선택한다.

Portrait가 세로(폰 세운거), Landscape가 가로(폰 눕힌거)다. 아무거나 해도 되는데 나는 1920x1080 Portrait로 했다.

맨 아래 +눌러서 원하는 해상도로 만들고, 이름도 정할 수 있는데, 지금은 그냥 연습용이니까 아무거나 하자

 

씬을 전환해야 하기 때문에 새로운 씬을 만들어준다. Project창의 Scene에 우클릭 후 위처럼 씬을 만들어 준다.

이름은 FirstScene이라고 했다.

 

스크립트도 작성할거라서 Project창의 Assets에 우클릭해서 Scripts라는 이름으로 빈 폴더도 만든다. 폴더별로 안 만들면 Assets에 마구잡이로 들어가기 때문에 정리하는 게 좋다. 그리고 나중에는 prefab 같은 것도 쓰는데, 이런 거 하려면 폴더 이름도 중요했던 걸로 기억한다. 그러니까 꼭 필요한 폴더들을 만들어서 정리해주는 습관을 들이는 게 좋다.

다 만들면 Project창이 위처럼 된다.

 

FirstScene에서 버튼을 누르면 SampleScene으로 전환되게 만들 것이다.

현재는 SampleScene이 열려있으니 여기서 FirstScene을 더블클릭 해서 열려있는 씬을 바꿔주자.

 

이번엔 오브젝트도 하나 만들어 보자. Hierarchy창에서 우클릭하고 위처럼 빈 오브젝트를 만든 후 GameManager라고 이름을 바꿔준다.

 

사용할 스크립트도 만들어준다. Project창에서 아까 만든 Scripts폴더 안에 C#스크립트를 만들어주고 이름을 GameManager라고 해준다.

다른 스크립트들과 다르게 게임매니저같은 스크립트는 아이콘도 톱니 모양으로 바뀐다.

지금 만든 스크립트는 이름처럼 게임매니저 오브젝트에서 사용할 것이다.

다시 기억하자. 오브젝트는 Hierarchy창에서, 스크립트는 Project창에서 만든다.

 

오브젝트와 스크립트까지 다 만들면 위처럼 된다.

 

아까 만든 GameManager 스크립트를 더블클릭해서 비주얼 스튜디오로 열어서 잘 열리는지 본다.

기본적으로 빈 화면이 아니라 코드들이 적혀있다. 이는 유니티에서 스크립트 파일을 만들면 기본적으로 적혀있는 코드들이다. 클래스 안에 메소드 2개가 있는데, 이 메소드들은 유니티에서 가장 중요한 개념 중의 하나인 생명주기와 관련이 있다.

주석을 읽어보면 어떤 역할을 하는지 대강 알 수 있겠지만, 다음에 생명주기와 관련된 포스팅을 따로 하기로 한다.

 

이제 씬을 넘길 버튼을 만들어준다. 오브젝트는 Hierarchy에서 건든다고 했으니 Hierarchy창에서 우클릭하고 위 사진처럼 버튼을 만들어준다.

 

버튼을 만들면 Scene에 허옇고 큰 게 생기며, Hierarchy에 바로 버튼이 생기는 게 아니라 Canvas라는 게 생기고 그 안에 Button이 들어간다. Button 왼쪽 세모 눌러보면 안에 Text도 있다. 또 EventSystem이라는 것도 생겼다.

이렇게 UI에는 여러 오브젝트의 조합으로 이루어진 것들이 많이 있고, UI는 Canvas안에서 존재하고 동작해야한다.

 

 

Hierarchy에서 Canvas를 더블클릭하면 Scene이 이렇게 멀어지는데, 플레이어의 눈인 카메라와 UI를 담는 캔버스가 일치하지 않다는 것을 알 수 있다.

하지만 Game창을 눌러보면 카메라가 비추는 화면과 캔버스의 화면이 일치되어 보이게 되는데, 이를 통해 게임에서 필요한 보이는 오브젝트들과 UI를 따로 구분해 쉽게 개발할 수 있다.

하지만 초심자인 우리들은 카메라와 캔버스가 따로따로 있으면 왔다갔다 익숙하지 않아서 불편할 수 있다.

그래서 카메라와 캔버스의 크기를 맞춰보자

 

Hierarchy의 Canvas를 선택하고 Inspector창을 보면 Canvas라는 속성이 있다. 참고로 Inspector창에 나타나는 속성들은 모두 클래스로 만들어져 있기 때문에 스크립트를 통해 접근해서 값을 변경할 수 있다. 물론 내가 속성을 만드는 것도 가능하다.

아무튼 Canvas속성의 Render Mode를 Screen Space - Camera로 바꿔준다.

 

 바꾸면 Canvas안의 내용물이 바뀌게 되는데, Render Camera의 오른쪽 동그라미를 눌러 Scene의 Main Camera를 선택한다. Hierarchy창의 Main Camera를 Inspector창의 Render Camera로 드래그 앤 드랍으로 놓아도 된다.

이렇게 하면 카메라와 캔버스의 크기가 같게 되고 한눈에 작업하기도 쉬워진다.

물론 이렇게 안 하고 기본으로 만들어져 있는 Screen Space - Overlay로 해도 된다.

 

이제 캔버스의 크기가 작아졌으니 작업하기 편해졌다.

Hierarchy에서 Button을 선택하고, w를 눌러서 가운데 네모를 좌클릭해 드래그하면 위치를 움직일 수 있다.

수직 화살표를 잡고 움직이면 수직으로 움직이고, 수평 화살표를 잡으면 수평으로 움직인다.

Button을 선택하고 Inspector창의 Rect Transform 속성의 Pos X, Y를 이용해서 위치를 옮길 수도 있다.

 

* Transform과 Rect Transform의 차이

더보기

참고로 일반적인 오브젝트는 Transform속성, Canvas안의 UI들은 Rect Transform 속성을 가진다.

예를 들어 우리가 만든 GameManager 오브젝트는 Inspector를 보면 Transform이고, Button은 Rect Transform이다.

 

Rect Transform은 Pivot과 Anchors를 이용해서 기준점을 잡고 오브젝트의 위치와 크기를 잡는 건데, 일반 오브젝트와 좌표를 잡는 방식이 조금 다르다.

 

이렇게 되어있는 이유를 간단히 설명하면, 화면 크기나 비율은 기종마다 다르다. 그런데 UI를 한 위치에 고정 해 버리면 UI가 잘리거나 가운데로 몰리게 될 수 있다. 그렇기에 Rect Transform을 이용해서 잡아주면 핸드폰이든 태블릿이든 기종에 상관없이 원하는 위치와 크기를 정해줄 수 있기 때문이다.

 

위 내용을 포함해서 유니티에서 사용하는 좌표계도 여러 가지가 있는데, 그것도 따로 포스팅하기로 한다.

 

그리고 아까 버튼을 w를 눌러서 움직였는데, 이건 Scene창에서 사용하는 툴 단축키다. 유니티 왼쪽 상단에 위 사진 같은 아이콘들이 있다.

왼쪽부터 q, w, e, r, t, y이며, 가장 오른쪽은 에디터 툴인데, 커스텀 툴을 넣어서 쓴다.

q는 Hand Tool로 이걸 선택하고 Scene창을 드래그하면 움직인다. 여기저기 살펴볼 때 쓴다.

w는 Move Tool로 위에서 버튼을 움직인 것처럼 Scene에서 오브젝트를 움직이게 한다.

e는 Rotate Tool로 Scene에서 오브젝트를 회전시킨다. 왼쪽 오른쪽뿐만 아니라 앞뒤로도 회전된다.

r은 Scale Tool로 오브젝트의 크기를 좌우로 늘리거나 줄일 수 있다. Transform의 Scale속성이 변한다.

t는 Rect Tool로 r과 똑같이 오브젝트의 크기를 조절하는데, 대각선으로도 늘릴 수 있다. 그림판에서 그림 크기 조절하는 거랑 비슷하다.

y는 종합세트다. Move, Rotate, Scale 한 번에 다 조절 가능하다.

 

r인 Scale Tool과 t인 Rect Tool은 똑같이 크기를 조절하지만, r은 위치가 고정된 채 상하좌우로 크기를 조절하고 t는 위치까지 변하면서 크기가 조절된다. 또 Rect Transform인 경우 r은 Scale값이 변경되고 t는 Width와 Height값이 변경된다.

 

개인적으로 많이 사용하는 툴은 q, w, t이다. 뭔가를 만들려면 위 툴들을 매우 자주 사용하니까 손에 익히고 어떤 기능을 하는지 오브젝트를 하나 만들어서 가지고 놀아보는 게 좋다. 물론 툴 이름은 알 필요 없다.

 

이제 툴도 배웠으니 버튼 크기를 키워보자. t를 눌러 Rect Tool을 선택해 원하는 크기만큼 키운다.

 

이제 Hierarchy창의 Button 아래 Text를 눌러 Inspector창을 위와 같이 수정해 준다.

Text를 수정해서 버튼에 쓰인 글자를 바꿨고, Font Size를 조절해 잘 보이게 해 줬다. 나머지는 안 건들었다.

 

이제 GameManager스크립트의 코드를 입력하자. 위와 같이 퍼블릭 클래스 안에 메소드 하나만 추가한 후에 유니티로 돌아간다. 메소드의 이름은 상관 없으나, 접근지정자 public과 메소드의 내용물은 대소문자도 똑같이 써줘야 한다.

SampleScene이라는 씬을 불러오는 코드인데, 이 코드를 버튼을 눌렀을 때 실행하게 하면 화면이 전환된다.

 

씬 이름은 존재하는 씬이라면 아무거나 해도 되지만, 지금은 우리가 만든 FirstScene에서 원래 만들어져 있던 SampleScene으로 전환할 것이기 때문에 위처럼 적는다.

 

유니티의 Console창을 보면 분명 스크립트에서는 문법 오류가 없었는데 여기서는 에러가 떴다.

이처럼 문법 오류는 비주얼 스튜디오에서 잡고 유니티에서 쓰이는 클래스나 메소드들이 잘못된 경우에는 유니티의 Console창을 확인해서 잡아주면 된다. 위의 에러는 SceneManager를 사용하기 위해 using을 쓰지 않았기에 생긴 에러다.

 

+ 문법 에러가 맞다. 

더보기

using 안했는데 어떻게 문법 에러가 아닌가? 생각해보니 이상해서 유니티를 확인했더니 비주얼스튜디오2019가 유니티와 연동되어있지 않아 유니티에 사용하는 것들을 확인할 수 없었던 것이다.

만약 나와 같은 상황이라면 위 사진처럼 유니티 좌측상단 Edit -> Preferences로 들어가 External Tools에서 맨 위의 External Script Editor를 비주얼스튜디오2019로 설정하고 Regenerae project files를 누른 다음 비주얼스튜디오를 껐다가 켜면 해결된다...

 

위 사진처럼 using문의 맨 아래에 한 줄 더 추가하면 에러가 없어진다.

이제 스크립트에 적은 메소드를 버튼에 적용시켜야 한다.

 

위에서 Inspector창의 Transform같이 속성이라고 계속 설명했던 것들은 사실 유니티에서 이름이 Component이다.

우리는 이제 GameManager 오브젝트에 스크립트 컴포넌트를 집어넣을 것이다.

 

오브젝트는 어디? Hierarchy에서 GameManager 오브젝트를 선택하고 Inspector창에서 Add Component를 누른 다음 GameManager 스크립트를 검색해 찾아서 넣는다.

Project창의 스크립트를 Inspector에 드래그 앤 드랍으로 넣어도 된다. 이게 더 편하다.

 

이후 Hierarchy에서 Button을 선택하고 Inspector창에서 Button컴포넌트를 찾아 OnClick() 아래에 있는 +버튼을 누르면 위 사진처럼 된다.

 

None이라고 써있는 부분의 오른쪽 동그라미를 눌러서 GameManager 오브젝트를 찾던지 Hierarchy에서 드래그앤 드랍으로 저곳에 넣어준 후에 No Function을 눌러 위처럼 아까 스크립트에 넣은 메소드를 선택해 준다.

 

그러면 Button을 누르면 메소드가 실행되게 된다.

 

정리하자면 GameManager오브젝트에 GameManager스크립트를 넣고, 스크립트가 있는 GameManager오브젝트를 버튼에 넣어서 만들어 놓은 메소드를 OnClick에 넣었다.

메소드에 public을 붙여야 하는 이유가 public이 아니면 여기에 나타나지 않아서 선택할 수 없게 된다.

 

이런 과정을 통해 버튼을 누르면 메소드의 기능이 동작하게 만들어낸다. 씬 전환뿐만 아니라 다른 기능도 넣을 수 있다.

복잡한것 같지만 최대한 안 보고 한두 번만 해보면 쉽게 할 수 있다.

 

이제 FirstScene에서 SampleScene으로 넘어가면 씬이 바뀌었는지 안바뀌었는지 알아야 하기 때문에 Project창에서 SampleScene을 더블클릭해 씬을 바꿔주고 위 사진처럼 원을 하나 만들어 준다.

 

Circle을 선택하고 w툴을 사용해서 원하는 위치로 옮겨주고 다시 FirstScene으로 돌아간다.

 

FirstScene으로 돌아왔으면 이제 유니티 중앙 상단의 재생모양 버튼을 누르면 버튼이 파래지면서 Scene창에서 Game창으로 넘어간다. 방금 만든게 실행되는 중이다.

 

다음 씬으로 버튼을 눌러보면

 

SampleScene으로 잘 넘어왔다.

 

*실제 빌드 할 때 주의사항

더보기

나중에 실제 빌드할때는 유니티 좌측 상단의 File -> BuildSettings에서 Add Open Scenes눌러서 현재 만들어진 모든 씬들을 불러온 후에 드래그해서 순서를 맞춰줘야한다.

씬을 불러오지 않으면 없는 씬은 빌드가 안되고, 씬 이름 오른쪽 끝에 0, 1같이 숫자가 써있는데, 0부터 가장 처음에 등장하는 씬이다. 방금까지 만들었던 프로젝트의 경우에는 FirstScene이 0으로 가게 해주면 된다.

물론 실제 빌드할건 아니라서 지금 해야하는 것은 아니다.

 

마음같아서는 Inspector창의 모든것들과 유니티 화면 안의 각각의 기능들, 언제 쓰는지 다 적고싶은데 최대한 필요한 것만 적어도 간단한 씬 전환 기능 하나 만드는데만 글이 이렇게 길어졌다.

완전 처음 유니티를 접하는 사람이 최대한 따라하기 쉽게 적어봤는데, 앞으로는 어떻게 적어야할지 고민된다.

728x90
COMMENT