* 해당 글은 게임 프로그래머 입문 올인원 강의를 보고 정리한 글입니다
https://www.inflearn.com/roadmaps/355#introduce
MMORPG 게임 개발, 켠김에 끝판왕까지! (유니티 + C#) 로드맵 - 인프런
C#, Unity 스킬을 학습할 수 있는 게임 개발 로드맵을 인프런에서 만나보세요.
www.inflearn.com
* UI(User Interfase)
사용자와 게임이 소통하는 화면 요소
(예) 버튼, 텍스트, 체력바, 인벤토리 창 등
* UI도 GameObject이다 → 하지만 특별하다
화면에 고정되고, Canvas 위에만 있어야 하는 특수한 친구
전용좌표계인 RectTransform, 전용 입력 처리 방식인 EventSystem + GraphicRaycaster를 사용
ㄴ EventSystem : UI 이벤트(클릭, 드래그, 포커스 등)를 관리하고 분배하는 중앙 관리자
ㄴ GraphicRaycaster : UI 충돌 처리
[UI 충돌처리란?]
겹쳐 있는 여러 UI 요소 중 어떤 것에 이벤트를 전달할지를 결정하는 과정
* UI는 원근법에 적용받지 않는다(Screen Space - Overlay 모드)
* GameObject와 UI의 차이
GameObject | UI | |
부모 | 아무 오브젝트 아래 가능 | 반드시 Canvas 아래에 있어야 함 |
좌표 | Transform (월드 좌표) | RectTransform (화면 기준 좌표) |
렌더링 방식 | 3D/2D 공간에서 보임 | 화면에 고정해서 보임 (스크린 기준) |
입력 처리 | 충돌 처리(Collider) + Raycast | EventSystem + GraphicRaycaster |
예시 | 캐릭터, 몬스터, 총알 | 버튼, 체력바, 인벤토리, 텍스트 |
* Canvas의 역할
UI는 Canvas 안에서 렌더링되며, Canvas는 UI의 기준 좌표계를 제공한다
Canvas는 설정된 Render Mode에 따라 UI의 렌더링 방식(화면 고정, 카메라 연동, 3D 배치)이 결정된다
* UI에서의 카메라
유니티에서는 기본적으로 Canvas의 Rander Mode는 Overlay로 설정되어 있다
종류 | 설명 | 카메라 지정 여부 |
Screen Space - Overlay | 무조건 화면 맨 위에 뜸 | 필요 없음 |
Screen Space - Camera | 특정 카메라 안에 UI를 보여줌 | 카메라 지정 필요 |
World Space | 진짜 3D 공간에 떠 있음 | 카메라가 보는 방향 따라 달라짐 |
* Anchor(엥커)
부모 기준으로, UI 오브젝트가 어디에 붙어 있을지 정하는 기준점
엥커를 설정하면, 화면 크기가 변해도 UI의 상대 위치를 일관되게 유지할 수 있다
(+) 웹 반응형과 비교
웹에서는 min-width, min-height 같은 CSS 속성으로 최소 크기를 설정할 수 있다
유니티에서도 비슷한 방식으로 최소 크기를 강제할 수 있다
Layout Element 컴포넌트를 추가하고 Min Width, Min Height 값을 설정하면 된다
* 프리셋(Preset)
게임 오브젝트를 저장해 둔 템플릿
복제해서 재사용 가능한 설계도(총알, 몬스터, 버튼 등 반복되는 오브젝트 생성에 사용)
* 에셋(Asset)
유니티 안에서 사용하는 모든 데이터 파일
(= 프로젝트에서 쓰이는 모든 재료)
* 이벤트 콜백 함수
특정 이벤트가 발생했을 때, 자동으로 호출되는 함수
유니티가 미리 약속해둔 이름을 사용해야 자동 호출된다
* UnityEngine.Object
모든 유니티 객체의 최상위 부모 클래스
마치 자바의 Object처럼,,,
UnityEngine.Object
├── GameObject
│ └── (여기에 Component인 Button, Image 등을 붙이는 것)
├── Component
│ ├── Transform
│ ├── Renderer
│ ├── Collider
│ ├── CanvasRenderer
│ ├── Text
│ ├── Button
│ └── (등등)
├── ScriptableObject
├── Texture
├── Material
├── AudioClip
└── 기타 에셋(Asset)들
* gameObject
MonoBehaviour를 상속받은 클래스에서는 자동으로 사용 가능하며, 이 스크립트가 붙어있는 GameObject를 가리킨다
* 유니티에서는 InstanceID를 양수와 음수로 나눠서 런타임 객체와 에디터 객체를 구분한다
ㄴ 양수 : 에디터에 등록된 Asset 객체(씬에 저장된 프리팹, 에셋 파일 등)
ㄴ 음수 : 런타임 메모리 객체(씬에 임시로 만들어진 오브젝트 등)
ㄴ hideFlags : 유니티 에디터에서 오브젝트를 숨기거나 보호할지 설정하는 플래그
ㄴ m_CachedPtr : 유니티 C++ 엔진 쪽에 있는 실제 오브젝트 메모리 주소(Native Pointer)
ㄴ m_InstanceID : 유니티가 오브젝트를 식별하기 위해 부여한 고유 ID
ㄴ m_UnityRuntimeErrorString : 런타임 에러 발생 시 에러 메시지를 저장하는 필드
ㄴ name : 유니티 에디터나 런타임에서 보여주는 오브젝트 이름
'게임프로그래밍 > MMORPG 게임 개발(C#, 유니티)' 카테고리의 다른 글
[MMORPG 게임 개발(C#, Unity)] Part 4. Animation(애니메이션) (0) | 2025.04.22 |
---|---|
[MMORPG 게임 개발(C#, Unity)] Part 4. Camera(카메라) (0) | 2025.04.22 |
[MMORPG 게임 개발(C#, Unity)] Part 4. Collision(충돌) (0) | 2025.04.20 |
[MMORPG 게임 개발(C#, Unity)] Part 3. Prefab(프리팹) (0) | 2025.04.18 |
[MMORPG 게임 개발(C#, Unity)] Part 3. Transform(트랜스폼) (0) | 2025.04.18 |