(1부의 내용들은 기본적인 내용들이라 책을 참고하여 학습하거나 유니티 설치 과정을 검색하여 설치하시면 됩니다. 유니티 설치 및 기본적인 내용들로 구성되는 파트이므로 간략하게 작성하였습니다.)
1장 유니티 준비하기
1.1 유니티 허브 설치
- 무료 라이선스 설치(10만 달러 이하는 무료)
1.2 유니티 에디터 설치
- LTS(Long Term Surpport) 버전을 다운 받길 권장한다.
- Visual Stduio 2022, Android, IoS 패키지를 같이 다운받길 추천한다.
1.3 프로젝트 생성
2장 유니티 인터페이스 둘러보기
2.1 레이아웃 변경
① 유니티 에디터의 오른쪽 상단에서 Default > 2 by 3 클릭
② 콘솔창 추가 : Window > General > Console 클릭
③ 아래의 사진과 같이 창들을 드래그 앤 드롭하여 배치시켜준다.
2.2 메인창
(1) 씬 창(Scene) : 게임 월드인 씬을 시각적으로 편집하는 창
(2) 하이어라키 창(Hierarchy) : 씬에 존재하는 모든 오브젝트가 나열되는 창
(3) 인스펙터 창(Inspector) : 선택한 게임 오브젝트의 정보와 컴포넌트가 표시되는 창
(4) 게임 창(Game) : 플레이어가 실제로 보게 될 화면을 띄우는 창
(5) 프로젝트 창(Project) : 프로젝트에 사용할 에셋들이 표시되는 창
(6) 콘솔 창(Console) : 로그나 에러가 표시되는 창
* 에셋 : 개발에 필요한(사용할) 모든 형태의 파일
* 컴포넌트 : 게임 오브젝트에 부여되는 속성
2.3 Inspector
(1) 트랜스 폼 : 오브젝트의 좌표와 크기, 회전을 지장한다.
(2) 메시 필터 : 메시 파일을 받아 오브젝트의 외곽선을 지정합니다.
(3) 메시 렌더러 : 메시를 따라 색을 채워 그래픽 외형을 그립니다.
(4) 박스 콜라이더 : 다른 물체가 부딪칠 수 있는 물리적인 표면을 만듭니다.
(5) 리지드바디 : 게임 오브젝트가 물리와 중력의 영향을 받게 합니다.
3장 유니티 엔진이 동작하는 원리
3.1 상속과 재사용
ㆍ상속 : 이미 만들어진 클래스에 새로운 코드와 기능을 덧붙여 새로운 클래스를 만드는 방법
ㆍ클래스 : 묘사할 대상과 관련된 코드(변수와 메서드 등)를 묶는 틀
Ex)
① "Monster" 라는 클래스를 만듭니다. 이 클래스에는 인공지능 기능, 애니메이션 기능, 공격과 방어 기능, 물리 기능, 기타 필수 기능을 가지고 있습니다.
② 이를 기반으로 "Orc" 라는 클래스를 만들기 위해선 Monster 클래스를 상속받고 그 외에 Orc에게 필요한 기능들만 Orc클래스에 만들면 됩니다. (초록색 피부, 오크의 애니메이션, 오크의 스킬, 그외 오크의 고유 기능 등)
③ 이로 인해 개발자는 위에 설명한 기능들을 다시 구현할 필요가 없어집니다.
(1) 상속의 한계(상속에만 의존할 시 생기는 문제)
① 나중에 구현할 지식 클래스에 무엇이 필요한지 처음부터 정확하게 추측하기 어렵다.
② 부모 클래스의 기존 기능이 나중에 구현한 자식 클래스의 기능과 충돌할 수 있다.
③ 코드를 재사용하기 힘든 경우가 생길 수 있다.
④ 기획자가 새로운 오브젝트를 만들기 위해선 프로그래머에게 의존해야 한다.
Ex)
① "Human" 이라는 클래스를 만듭니다. 이 클래스에는 렌더 기능, 물리기능, 애니메이션 기능, 체력 기능, 기타 필수 기능을 가지고 있습니다.
② 플레이어가 직접 조작하는 "Player" 클래스를 만듭니다. Player 클래스는 Human 클래스를 상속하여 Human의 모든 기능을 가집니다. 추가로 조작 기능, 공격 기능, 직업 기능, 그외 필수 기능을 추가합니다. 여기까진 문제가 없어 보입니다.
③ "Human" 클래스를 상속한 "NPC" 클래스를 구현합니다. 하지만 이 과정에서 문제가 생깁니다. 바로 Human 클래스의 물리 기능과 체력 기능은 필요가 없습니다. 따라서 개발자는 Human으로부터 물려받은 물리와 체력 기능을 제거해야 합니다. 즉, 상속으로 인해 오히려 추가 작업이 생겼습니다.
3.2 컴포넌트 패턴 : 조립하는 게임 세상
ㆍ상속에만 의존했을 때 생기는 문제점을 해결하기 위한 방법
ㆍ미리 만들어진 부품(컴포넌트)를 조립하여 완성된 오브젝트를 만드는 방식이다.
3.2.1 컴포넌트를 활용한 동물 만들기
① 컴포넌트를 미리 여러개 만들기
- 폐, 아가미, 뿔, 지느러미, 잠자기, 다리 등
② 빈 오브젝트 생성하기
- 코뿔소, 물고기 등
③ 오브젝트 완성하기
- 코뿔소 : 폐, 다리, 식사, 뿔 등
- 물고기 : 아가미, 헤엄, 비늘 등
3.2.2 게임 오브젝트와 컴포넌트의 특징
① 유연한 재사용이 가능하다.
ㆍ상속은 부모 클래스의 불필요한 기능까지 모두 가져온데 반해 컴포넌트 방식은 원하는 기능만 선택적으로 쓸 수 있다.
② 기획자의 프로그래머 의존도가 낮아진다.
③ 독립성 덕분에 기능 추가와 삭제가 쉽다.
ㆍ기존의 방식은 코드의 한 부분만 수정하더라도 관련된 여러 부분의 코드가 망가질 수 있지만, 컴포넌트 방식은 다른 기능이 망가지지 않는다.
3.2.3 컴포넌트의 독립성
ㆍ컴포넌트의 기능은 컴포넌트 내부에 완성 되어있다. 그러므로 다른 컴포넌트에 의존하지 않는다.
ㆍ즉, 게임 오브젝트에 어떤 컴포넌트를 마음대로 조립하거나 빼도 다른 컴포넌트가 망가지지 않는다.
3.3 메시지와 브로드캐스팅
3.3.1 MonoBehaviour
ㆍ컴포넌트에 필요한 기본 기능을 제공합니다. 즉, MonoBehaviour를 상속한 클래스는 게임 오브젝트에 컴포넌트로서 추가될 수 있습니다. 이를 상속해서 만든 컴포넌트는 유니티의 제어를 받게되며 유니티의 메시지를 들을 수 있습니다.
3.3.2 메시지 기반 방식(브로드캐스팅)
ㆍ유니티는 컴포넌트의 어떤 기능을 실행시키고 싶을 때 메시지를 날리는 방식을 사용합니다.
ㆍ메시지를 무차별적으로 여러 오브젝트에 동시에 뿌리고 이에 해당하는 오브젝트는 응답을 하고 이에 해당하지 않는 오브젝트는 메시지를 무시합니다. 이러한 방식을 브로드캐스팅 방식이라고 합니다.