Unity 오목 게임 개발: GameObject와 Prefab의 이해
GameObject와 Create Empty
Unity에서 Create Empty
를 통해 생성되는 것은 빈 GameObject입니다. GameObject는 Unity 씬의 기본 단위로, 다음과 같은 특징이 있습니다:
- Transform 컴포넌트만 가지고 있어 위치, 회전, 크기 정보를 관리합니다
- 자체적으로는 시각적 요소가 없습니다
- 다양한 컴포넌트를 추가하여 기능을 확장할 수 있습니다
- 다른 GameObject의 부모 역할을 할 수 있어 계층 구조를 만들 수 있습니다
오목 게임에서는 Board
와 InputManager
같은 빈 GameObject가 게임 로직을 관리하는 역할을 담당합니다.
Prefab(프리팹)의 개념
Prefab은 재사용 가능한 GameObject 템플릿입니다:
- 모든 컴포넌트와 속성이 미리 설정된 GameObject의 청사진입니다
- 씬에 여러 번 인스턴스화할 수 있습니다
- 프리팹 원본을 수정하면 모든 인스턴스에 변경사항이 적용됩니다
- 프로젝트 창에 저장되며, 여러 씬에서 사용할 수 있습니다
오목 게임에서는 cellPrefab
(격자 칸), blackStonePrefab
(흑돌), whiteStonePrefab
(백돌)과 같은 프리팹을 사용했습니다.
GameObject와 Prefab 연결하기
GameObject와 Prefab의 연결은 다음과 같은 방법으로 이루어집니다:
- 인스펙터를 통한 참조 설정:
public GameObject cellPrefab; // Inspector에서 드래그 앤 드롭으로 설정
- 코드를 통한 인스턴스화:
GameObject cell = Instantiate(cellPrefab, position, Quaternion.identity);
- 부모-자식 관계 설정:
cell.transform.SetParent(transform); // 현재 GameObject의 자식으로 설정
이러한 방식으로 오목 게임에서는 BoardManager
스크립트가 연결된 빈 GameObject가 프리팹을 인스턴스화하여 격자와 바둑돌을 생성합니다.
하이라키에서 제거해도 이상이 없는 것들
하이라키에서 제거해도 게임 동작에 이상이 없는 것들:
-
프리팹의 원본: 프리팹은 프로젝트 창에 저장되므로 하이라키에서 인스턴스를 제거해도 원본은 유지됩니다.
-
런타임에 생성되는 오브젝트: 게임 실행 중에 코드로 생성되는 오브젝트는 에디터 씬에 미리 배치할 필요가 없습니다. 오목 게임에서 바둑돌이 이에 해당합니다.
-
디버그용 임시 오브젝트: 테스트를 위해 임시로 추가한 오브젝트들
반면, 다음은 제거하면 문제가 발생할 수 있는 것들입니다:
-
게임 로직을 관리하는 매니저 오브젝트:
Board
나InputManager
같은 게임의 중심 로직을 담당하는 GameObject -
다른 스크립트에서 참조하는 오브젝트:
FindObjectOfType
등으로 참조되는 오브젝트 -
기본 씬 요소: Main Camera 같은 게임 렌더링에 필수적인 요소
오목 게임 구현에서의 적용
오목 게임에서는 다음과 같이 이 개념들을 활용했습니다:
-
빈 GameObject를 생성하여
BoardManager
와InputManager
스크립트를 부착 -
프리팹으로 격자 칸(Cell)과 바둑돌(Stone)을 정의
-
코드로 연결하여 격자를 생성하고 사용자 입력에 따라 바둑돌을 동적으로 배치
이러한 방식으로 GameObject와 Prefab의 관계를 활용하면 코드 재사용성과 게임 구조의 명확성을 높일 수 있습니다.
댓글