KoreanFoodie's Study

3. 유니티 엔진이 동작하는 원리 : 유니티 튜토리얼 본문

Game Dev/Unity : Tutorial

3. 유니티 엔진이 동작하는 원리 : 유니티 튜토리얼

GoldGiver 2021. 9. 2. 21:19

상속?

객체 지향언어에서 상속을 사용하면 기존에 만들어놓은 템플릿을 확장/수정함으로써 비슷한 템플릿을 만들 수 있다. (상속에 대해 잘 모른다면 여기를)

그런데 예를 들어, "HUMAN"이라는 클래스를 만들었다고 하자. 만약 이 클래스를 확장시켜 플레이어, NPC, 심지어 몬스터까지 만든다면 어떨까?

각각의 오브젝트는 성격이 매우 다르기 때문에 오히려 상속을 통한 작업이 효율을 떨어뜨릴 수 있다. 따라서, 컴포넌트 패턴을 알아야 한다.

 

컴포넌트 패턴

기획자는 게임에 등장할 모든 동물을 사전에 기획할 수 없다. 즉, 부품마다 대표 기능을 부여하고, 여러 부품을 게임 오브젝트에 조합하는 방식이 효율적이다!

1. 컴포넌트를 미리 여러 개 만들기

2. 빈 게임 오브젝트 생성하기

3. 코뿔소 게임 오브젝트 완성하기

4. 다른 동물의 게임 오브젝트 생성하기

컴포넌트를 이용하면, 

1. 유연한 재사용이 가능하고

2. 기획자의 프로그래머 의존도가 낮아지고

3. 독립성 덕분에 기능 추가와 삭제가 쉽다!

컴포넌트의 독립성 : 

게임 오브젝트는 단순한 빈 껍데기이며, 컴포넌트는 스스로 동작하는 독립적인 부품이다. (내부적으로 완결되어 있음)

 

메시지와 브로드캐스팅

컴포넌트 구조에서는 '전체 방송'을 이용해 컴포넌트의 특정 기능을 간접적으로 실행할 수 있다. 이런 전체 방송을 '브로드캐스팅'이라고 한다

MonoBehaviour는 무엇일까?

유니티의 모든 컴포넌트는 MonoBehaviour 클래스를 상속한다. MonoBehaviour 클래스는 유니티에서 미리 만들어 제공하는 클래스이며 컴포넌트에 필요한 기본 기능을 제공한다. MonoBehaviour 클래스를 상속해서 만든 컴포넌트는 유니티의 제어를 받게 되므로, 컴포넌트는 유니티의 메시지를 들을 수 있다.

게임 컴포넌트들은 서로에게 관심이 없기 때문에(컴포넌트의 독립성), 메시지를 누가 보냈는지는 관심이 없고, 다만 해당 메시지가 원하는 기능을 갖고 있다면 실행할 뿐이다.

위 예에서, run()이라는 기능을 수행하고 싶을 때, 일일히 컴포넌트를 조사할 필요 없이, run()이라는 방송을 하면, run() 기능을 갖고 있는 컴포넌트만 이를 실행하게 된다!

 

유니티 이벤트 메서드

메시지와 브로드캐스팅은 Start( ), update( ), OnTriggerEnter( ) 등의 '유니티 이벤트 메서드'가 동작하는 원리이다.

예를 들어, Start( ) 메서드는 게임 오브젝트가 처음 활성화될 때 자동으로 한 번 실행된다. 이는 유니티가 해당 게임 오브젝트에 Start라고 적힌 메시지를 브로드캐스팅하기 때문이다!

 

Comments