이번 글은 retr0님의 아래 두 개의 영상과 Perplexity를 이용해 학습한 Unity라는 게임 엔진의 원리에 대한 이해의 과정을 정리하고자 하는 목적으로 작성합니다.
https://www.youtube.com/watch?v=qfLah3vuxJg
https://www.youtube.com/watch?v=SDsIGX3QKqI
Perplexity를 이용해 영상을 요약해 보자
영상을 보기에 앞서 먼저 perplexity로 요약한 내용을 읽어볼 수 있을까?? 싶어
다음과 같이 해봤습니다.
위와 같이 영상 링크와 함께 영상 내용을 요약해 달라고 먼저 테스트를 해봤습니다.
어떤 방법으로 영상 내용을 파악하고, 요약을 했는지 모르겠지만
영상을 보고 나니까 정확하게 요약해 줬다는 것을 알 수 있었습니다.
몇 가지 잡다한 질문을 하고 난 뒤에 다음과 같이 속편의 링크까지 제공해서 요약을 부탁했고
요약한 내용과 같이 Unity의 컴포넌트의 독립성과 각각의 독립적인 컴포넌트들이 메시지를 이용해 통신하고 있음을 설명해 주는 내용이더라고요
추가로 perplexity는 다음과 같이 연관되어 질문할 만한 거리를 제공해 주는 점이 흥미로웠습니다.
이렇게 관심 있는 주제를 계속 질문해서 이해의 깊이를 점점 깊게 가져가는 게 어떤 개념을 학습하는데 굉장히 도움 될 것 같다는 생각이 들었습니다.
Unity 게임 엔진의 원리 1편
그래서 위 영상과 perplexity를 이용해 확실하게 이해한 내용을 정리해 보겠습니다.
큰 맥락에서 내용을 정리하자면,
1. 전통적인 객체 지향 프로그램의 상속 개념의 한계점
2. Unity는 컴포넌트 기반 아키텍처를 통해서, 상속의 한계를 극복하려 했다.
3. 게임 오브젝트는 컴포넌트라는 도구를 장착할 수 있는 일종의 '틀'
4. Unity Editor를 이용해서 게임 오브젝트에 미리 만들어진 컴포넌트를 쉽게 추가/삭제할 수 있음
5. 컴포넌트 기반 설계가 코드의 재사용성을 높이고 유연성을 향상시킨다.
6. 각 컴포넌트는 독립적이다.
상속의 한계와 컴포넌트 기반 구조
객체 지향 프로그램의 상속 개념은 코드의 재사용성을 높이는데 도움 되지만, 되려 너무 엄격하게 상속의 개념을 도입하려 하는 경우 코드의 재사용이 오히려 어려워지는 경우가 발생합니다.
부모의 필요 없는 기능들도 자식에서 사용하게 되는 케이스가 그 예시일 수 있겠죠
이를 유니티는 상속 대신에 각 객체가 필요한 기능의 참조를 보유하는 형태로 풀어냈고, 그 기능의 참조가 컴포넌트라고 할 수 있을 것 같습니다.
따라서 유니티를 이용한 개발은 컴포넌트라는 기능 단위를 조합해 원하는 기능을 개발하는 구조가 가장 기본이 됩니다.
예시를 통해 확인해 보자
Unity Editor에서 생성 가능한 Cube 3D game object를 생성하면, Inspector 창을 통해 다음과 같은 컴포넌트를 확인할 수 있습니다.
위 사진에서 빨간 박스가 쳐진 Transform, Cube (Mesh Filter), Mesh Renderer, Box Collider가 모두 컴포넌트이며, 각각의 컴포넌트는 Cube라는 game object의 다음과 같은 기능들을 부여합니다.
- Transform
- 위치, 회전, 크기에 대한 개념과 기능 추가
- Cube (Mesh Filter)
- 큐브 형상의 그래픽 외곽선을 가질 수 있도록 한다.
- Mesh Renderer
- 외곽선을 따라 색을 채워준다.
- Box Collider
- 물체에 물리적 표면을 만들어 충돌 개념을 더해준다.
이처럼 각각의 Component를 이용해 기능 단위를 추가할 수 있으며, game object는 component를 담을 수 있는 틀의 역할만을 담당하는 것입니다.
만약, Component 중 Physics > Rigidbody(강체)를 추가하면, Cube Gameobject는 물리 개념이 적용되어 중력의 영향을 받게 됩니다.
메시지와 브로드캐스팅 - 2편
프로그래밍 측면에서의 메시징과 브로드캐스팅에 대한 개념을 다루는 것은 아니고요,
Unity에서 각각 독립된 Component들에게 어떤 식으로 명령을 내리는지?라는
의문을 해소해 주는 방법이 메시징과 브로드캐스팅입니다.
앞서 이해한 내용에 따라 다음과 같은 생각이 들었습니다.
- 각각의 컴포너트는 서로 독립적이라고 했다.
- 그렇다면, 서로 어떻게 영향을 주고받아서 동작하도록 만들 수 있을까?
- 독립적이라 했으니깐, 참조를 당연히 가지고 있지 않을 텐데..
컴포넌트의 구조는
- MonoBehaviour를 상속한다.
- MonoBehaviour는 컴포넌트로서 필요한 필수 기능들을 포함
- 여기에 각 컴포넌트의 고유 기능을 덧붙이는 형태이다.
그렇다면, MonoBehaviour를 상속하는 것의 의미는 무엇일까요
MonoBehaviour 상속의 의미
- 컴포넌트로서 게임 오브젝트에 추가될 수 있다.
- 유니티의 통제를 받는다.
- 유니티 이벤트 메시지를 감지할 수 있게 된다. 💡💡💡💡
Unity는 모든 컴포넌트가 서로 독립적인 상황에서 메시지 개념을 이용해 다른 컴포넌트에게 영향을 줍니다.
바로 실행하고자 하는 기능의 이름을 메시지에 담아 게임 세상에 뿌리는 방법으로요
메시지를 이용해 독립적인 구조를 유지할 수 있는 이유는
- 보내는 쪽은 누가 받는지 신경 쓰지 않는다.
- 받는 쪽은 누가 보냈는지 신경 쓰지 않는다.
- 메시지에 명시된 기능을 가지고 있다면 실행, 그렇지 않다면 무시
메시지를 사용함에 따라 위와 같은 이점을 누릴 수 있기 때문인 거죠
여기서 메시지를 뿌린다는 행위는 broadcasting이라고 부릅니다.
Broadcasting은
- 모든 게임 오브젝트에게 원하는 동작을 수행할 수 있도록 메시지를 전달하는 행위를 의미
- 사실, 특정 이벤트 발생을 알려 이벤트 핸들러를 호출할 수 있도록 하는 행위를 broadcasting이라고 한다.
- MonoBehaviour를 상속함에 따라 구현된 method들이 대표적으로 Unity가 Broadcasting 하는 event를 handling 하는 event handler라고 생각하면 좋을 것 같다.
- 이를 Unity Event Method라 부른다.
- Start, Update, OnTriggerEnter …
후기
SKT 통신사 이용 고객 대상으로 이벤트로 Perplexity 1년 구독을 어쩌다 받게 되어서 공부하면서 사용해 봤는데, 매우 유용하다는 인상을 받았습니다.
ChatGPT와 다르게 어떤 자료를 참고했는지 reference를 남겨주는 점이 매우 좋았고, 특히 영상 링크만 던져줬는데 요약해 주는 점에서 생각보다 너무 똑똑해서 놀랐습니다.
https://www.youtube.com/@JeminDEV
Unity는 사실 회사에 입사해서 접하게 된 지 8개월이 넘어가서 위 내용들을 처음 접한 것은 아니지만,
두 개의 영상으로 한 단계 더 깊게 이해할 수 있게 된 것 같아서 정리하고자 마음먹었습니다.
retr0님이 회사에 강연을 오셔서 그 계기로 유튜브 채널을 보다가 영상도 보게 되었는데요,
채널에 유익한 영상들이 많이 있어서 Unity 공부할 때 많이 참고하려 합니다.
https://perplexity.sktadotevent.com/
SKT 통신사 이용 고객 대상으로 perplexity 1년 이용권을 뿌리고 있는 것으로 알고 있어서, 참여 가능하신 분들은 한 번씩 사용해 보는 것도 나쁘지 않을 것 같습니다.
'Unity' 카테고리의 다른 글
[Unity] Android Studio로 개발한 라이브러리를 포함해서 패키징 하는 경우 (0) | 2024.11.13 |
---|---|
[Unity] Assert Class는 개발 빌드에서만 동작한다. (0) | 2024.11.11 |
댓글