# 게임 오브젝트 제어하기
#1 클래스와 오브젝트
클래스와 오브젝트는 객체지향(사람이 현실 세상을 보는 방식)의 핵심이다. 사람은 사물을 분해하여 생각하지 않고, 하나의 온전한 독립체로 여기는 경향이 있다. 예를 들어 사람은 컴퓨터를 보고 cpu, ram 그리고 그래픽과 같은 여러 부품으로 이루어져 있는 집합으로 여기지 않고 컴퓨터라는 온전한 물건으로 본다. 객체지향은 이러한 오브젝트의 집합으로 구성하는 방식이다.
#클래스
클래스는 묘사할 대상과 관련된 코드를 묶는 틀이다. 예를 들어 Human 클래스에는 사람의 특징을 규정하는 변수와 메서드가 구현된다. 사람, 동물, 꽃 등 다양한 사물에 관한 코드를 각자의 클래스로 만들어 묶어두면 코드 관리가 쉬워진다.
#오브젝트
물건의 설계도인 클래스와 달리 오브젝트는 실제로 존재하는 물건이다. 클래스는 하나만 존재하지만 클래스를 기반으로 생성한 오브젝트는 여러 개 존재할 수 있다. 이렇게 클래스라는 틀로 오브젝트를 찍어내 실체화하는 것을 인스턴스화 한다고 하며, 인스턴스화를 이용해 생성된 오브젝트를 인스턴스라고 한다.
#2 C# 클래스 만들기
클래스를 실습할 새로운 유니티 프로젝트를 만들어주자. 프로젝트 이름은 Practice Class라고 했다.
우리는 책에 나와 있는 것처럼 동물 클래스를 만들고 그것을 사용하여 동물 오브젝트들이 모여있는 동물원을 만들 것이다. 그럼 동물 클래스를 만들어보자.
Animal 클래스는 동물을 추상화한 클래스이다, 변수로 이름 Name과 울음소리 Sound를 가진다. PlaySound()는 울음소리를 재생하는 메서드이다. C#스크립트 Animal을 아래와 같이 생성하자.
생성된 Animal 스크립트 파일을 열어 아래와 같이 수정한다. 완성된 Animal 클래스는 이름 Name과 울음소리 Sound 변수를 가지며, 울음소리를 재생하는 메서드 PlaySound()를 가질 것이다.
이렇게 Animal 클래스라는 새로운 타입을 정의했지만 Animal 클래스는 실체가 아니기 때문에 아직은 어떠한 일도 일어나지 않는다. 이제 Animal 클래스를 기반으로 Animal 오브젝트를 만드는 Zoo 스크립트를 작성한다.
Zoo 스크립트의 Start() 메서드에서 Animal 클래스를 바탕으로 해서 Tom이라는 동물을 만들어 주었다. 프로젝트 창에서 Zoo 스크립트는 단순 텍스트일 뿐이다. 그래서 우리는 Zoo 스크립트를 게임 오브젝트에 컴포넌트로 추가해야 한다. 그렇게 하면 Zoo 스크립트는 게임상의 오브젝트가 되고, 게임 속에서 동작할 수 있게 된다. 아래의 사진처럼 새 게임 오브젝트에 Zoo 스크립트를 붙여준다.
이다음 씬을 플레이하면, 콘솔 창에 "톰 : 냐아아옹!"이라는 로그가 출력될 것이다.
다음은 jerry라는 새로운 Animal 오브젝트를 추가로 생성해보자. 그러면 아래와 같은 코드를 작성하게 될 것이다.
그렇다면 이 코드를 저장한 후 씬을 플레이하면, 콘솔 창에는 어떤 메시지가 출력될까? 예상처럼 "톰 : 냐아아옹!"과 "제리 : 찍찍!"이라는 로그가 출력될 것이다.
#3 변수로 컴포넌트 사용하기
참조 변수는 실체가 아니라 실체로 향하는 참조값을 저장한다. 변수의 참조값으로 실체에 접근하는 참조 타입 덕분에 변수로 씬에 있는 게임 오브젝트와 컴포넌트에 접근하고 이들을 조종할 수 있다.
#물리 큐브 만들기
먼저 씬에 큐브를 만들고, 코드로 해당 큐브가 점프하게 해 보자. 큐브를 만드는 방법은 아래와 같다.
그리고 Cube가 중력과 물리적인 힘의 영향을 받을 수 있도록, 인스펙터 창에서 Add Component -> Physics -> Rigidbody를 클릭하여 리지드 바디 컴포넌트를 추가해준다. 만약 Cube에 추가된 리지드 바디 컴포넌트를 코드를 통해 조종할 수 있다면 Cube 게임 오브젝트에 물리적인 힘을 추가해 원하는 곳으로 점프하게 만들 수 있다.
변수로 Cube 게임 오브젝트의 리지드바디 컴포넌트에 접근하고 힘을 추가하는 C# 스크립트를 만들어보자. 스크립트를 추가하여 스크립트 이름을 Jumper로 변경해 주자. 변경한 뒤에 아래와 같이 코드를 작성하고 저장해 주자.
코드를 다 작성하였다면 스크립트를 Cube 게임 오브젝트에 추가해준다. 그리고 Cube 게임 오브젝트의 Rigidbody 컴포넌트를 My Rigidbody 필드로 드래그해준다. 그러면 씬을 실행하게 되면 시작과 동시에 Cube 게임 오브젝트가 위로 1회 점프하는 것을 볼 수 있다.
이걸로 C# 프로그래밍의 기초이론은 끝이 났고, 다음부터는 본격적으로 게임을 완성해가며 기존 내용을 복습하고 유니티와 C#의 다루지 못한 부분을 채워간다.