Study/Unity
3D슈팅게임 수업자료
zeroplus1
2016. 9. 20. 18:14
수업자료 :
asset.zip

수업전 다운받아서 바탕화면에 다운 받으세요~
텍스처와 라이트 설정 (9/20 화)
9월 20일 수업완성 자료
프리팹과 코루틴(9/22 목)
9/27 수업완성 자료

점수화면 만들기
타이머 화면 만들기
게임의 상태를 관리하는 스크립트 만들기
- GUI
- GUIText
GUIText의 렌더링이 시작하는 위치는 화면 왼쪽 하단을 0,0으로, 화면 오른쪽 상단을 1,1,로 지정합니다. GUIText에 추가된 스크립트에서는 guiText변수에 접근할 수 있으며, guiText.text에 문자열을 설정함으로서 텍스트를 변경할 수 있다.
- GUITexture
제목 및 타임업 화면을 표시하기 위해 GUITexture를 사용했다. GUITexture랜더링이 시작되는 위치도 화면의 왼쪽 하단을 0,0으로, 화면 오른쪽 상단을 1,1로 지정합니다. 실습에서는 0.5, 0.5로 지정돼 있으며 이는 화면의 중심점을 가르킨다.
Pixel Inset의 X와 Y값에 각각 텍스처 이미지의 폭과 높이의 절반을 빼서 width와 height에 텍스처 이미지의 폭과 높이를 지정함으로서 화면의 중앙에 표시했다.
- GameController
게임 컨트롤러처럼 씬에서 아무것도 표시하지 않는 스크립트도 작동시키려면 씬 내부의 게임 오브젝트에 추가되어 있어야 한다.
- 상태관리
게임의 상태를 관리하기 위해 enum타입의 상태를 만들어 state변수로 상태를 관리했다. Update함수 안에서 switch/case문으로 각 상황에 맞게 제목 이미지를 표시하거나 게임을 시작하는 일을 한다. 다른 오브젝트에 추가된 컴퍼넌트의 함수를 실행하는 GameController의 Start 함수안에서 GameObject.Find함수를 사용해 씬에 포함된 게임 오브젝트에 접근할 수 있다.
SpawnPoint 및 Score 스크립트에 접근하기 위해 씬에 포함된 SpawnPoint오브젝트나 Score 오브젝트에 접근할 수 있게 했다. 접근할 수 있게 만든 게임오브젝트에 SendMessage함수를 사용함으로서 게임오븢게트에 추가돼 있는 컴포넌트의 함수를 실행할 수 있다.
예제에서 GameController스크립트의 아래에 표시한 부분에서는 SpawnPoint스크립트의 StartSpawn함수가 실행된다. 인자로는 호출할 함수명을 넣는다.
spawnPoint.SendMessage("StartSpawn"); |
또한 Debri스크립트의 OnMouseDown 함수에서는 아래와 같은 방법으로 Score 스크립트의 AddScore함수가 실행된다. 두번째 인자로는 호출할 함수의 인자를 지정한다.
GameObject.Find("Score").SendMessage("AddScore", score); |
유니티에서는 이런식으로 게임 오브젝트 사이에서 처리를 분담할 수 있다.
- 다른 컴포넌트에 접근하기
GameController스크립트의 Start함수 안에서 다음과 같이 Timer 컴포넌트를 가져온다
timer=GameObject.Find("Timer").GerComponert<Timer>(); |
이것은 씬에 포함된 Timer 오브젝트에 접근해 거기에 추가돼 있는 Timer 스크립트에 접근한다. 또한 다음과 같이 Timer 스크립트에서 public으로 선언된 함수를 호출할 수 있다.
timer.StartTimer(); |
이런 방식으로 유니티에서 GetComponent 함수를 사용해 어떤 스크립트에서 다른 스크립트나 컴포넌트에 접근할 수 있다.
- 컴포넌트의 활성화/비활성화 전환
GameController스크립트에서는 GUITexture 제목 이미지, 타임업 이미지를 표시하거나 표시하지 않는 상태로 전환하는 코드를 다음과 같이 작성했다.
guiTitle.enabled=true; |
모든 컴포넌트는 해당 컴포넌트가 활성화돼 있는지를 나타내는 enable 변수를 가지고 있다. 이것은 Inspector뷰에서 컴포넌트 이름의 왼쪽에 있는 체크박스의 값과 동일한 것이다. 비활성화 되어 있는 컴포넌트는 어떠한 처리도 수행하지 않는다.
완성파일 :