본문 바로가기
Unity/Base

유니티 기초. 유니티의 개발 방식에 관하여

by Pretty Garbage 2018. 6. 25.

유니티 공부를 하면서 복습겸 올리는 자료. Udemy 유니티 에센스 강의 들으면서 참고하고 적은 내용입니다.




기존에는 코드는 재활용하기 위하여(객체 지향) 클래스의 상속의 개념을 이용하여 재활용 해왔었습니다.


예를 들자면


 500px-KP-UML-Generalization-20060325.svg.png


Person(사람)이라는 기본 클래스가 있다면 그 사람 중에서도 학생이라는 직업을 갖고 있는 사람이 있을 것이고,

교수라는 직업을 갖고 있는 사람이 있을 것입니다.


Student(학생)은 이 사람이라는 공통적인 기능(name, age)에 덧붙여 grades 에 대한 정보가 추가 될것이고

Professor(교수)는 listOfStudents라는 정보가 추가될 것입니다.


현재의 많은 객체 지향 프로그래밍에서 상속이란 이렇게 사용되고 과거에 게임엔진에서도 이런 방식을 이용해 재사용되고 개발되어져 왔습니다.



하지만 게임 개발하면서 실제 적용해보니 재활용이 잘 안됐다!


위와 같은 예시에서는 문제가 없지만 게임 시스템에 대해서 이야기 해봅시다.


사람이라는 베이스 클래스가 있습니다.  


이 사람은 애니메이터, HP, MP, 직업 이라는 기능이 있다고 합시다. 


그리고 사람이라는 클래스를 상속받는 몬스터, NPC, 플레이어라는 클래스가 있습니다.


몬스터는 플레이어를 공격해야되기 때문에 공격이라는 기능을  추가합니다. 그리고 몬스터는 사람과 다른 움직임, 다른


애니메이션을 갖기 때문에 애니메이터라는 기능을 받아와도 재정의(overridng)을 해야합니다. 


NPC의 경우는 전투를 할 것이 아니기 때문에 HP, MP라는 기능을 빼고,


플레이어의 경우는 각종 스탯이 또 추가되야할 것입니다.


이론적으로는 공통적인 기능을 베이스에다가 모아두고 상속을 받고 재활용한다. 였는데 실제로는 재활용이 잘 안되었다고 합니다.


이유 : 계속 수시로 추가되어지는 캐릭터나 기능들이 기획자가 프로그래머에게 일일이 추가해주세요. 저거 추가해주세요. 매번 개발자에게 부탁을 해야한다는 단점이 있습니다.



그래서 나온게 바로 컴포지션 방식 ( 미리 부품을 많이 만들어서 사용시에 조립하자) 이것이 유니티가 사용하는 방식입니다.


※그래서 위에 설명한 상속의 개념을 안쓴다는 말은 아닙니다. (유니티의 개발방식이 기능(컴포넌트)를 많이 만들고 조립하는 방식이라는 설명.


컴포지션 방식이란... 미리 만들어진 부품들을 사용해서 하나의 오브젝트를 만드는 것입니다.


예를 들어 저는 어디에 쓰일지는 모르겠지만 숨쉬기, 뛰기, 걷기, 날기, 수영하기, 먹기, 알낳기, 새끼낳기 라는 기능을 미리 만

들어 둡니다.


그리고 이제 새라는 오브젝트를 만들어서 방금 만들어놓은 기능들을 연결시켜 봅니다.


새니까 걷기, 날기, 먹기, 알낳기 기능이 들어가겠군요. 이렇게 기능을 넣어놓고 오브젝트를 실행시키면 하나의 오브젝트가 완성됩니다.


이 방식의 장점은 이렇게 부품을 만들어놓으면 개발자가 아니라 기획자던 다른 직군의 사람도 만들어진 기능(컴포넌트)만 갖다가 붙이면 하나의 오브젝트가 완성된다는 장점이 있습니다.




유니티의 핵심은 처음부터 바닥부터 만들까가 아니라 이미 만들어져 있는 부품들을 어떻게 잘 조립할 것인가? 입니다.(언리얼도 같습니다.)






정리하자면


게임 오브젝트

- 단순한 컴포넌트들의 집합체

- 단순한 ID와 기초적인 기능 밖에 없음


컴포넌트

- 게임 오브젝트에 조립할 기능 및 부품들

- 같은 오브젝트안에 조립되어져도 서로에 대한 존재가 무관심


메시지

- 유니티는 게임 세상에 메세지를 뿌린다.

- 컴포넌트들은 메세지를 받아 스스로 동작한다.

서로의 존재를 모른체 메세지에 의해 작동한다.


'Unity > Base' 카테고리의 다른 글

Unity 카메라 워크 ( Camera Work )  (0) 2022.03.08
프리펩(Prefab) ! Nested Prefab ? Prefab Varient !?  (0) 2022.03.07
프리펩(Prefab) 배경 표시  (0) 2022.03.06