GameObject와 Create Empty

Unity에서 Create Empty를 통해 생성되는 것은 빈 GameObject입니다. GameObject는 Unity 씬의 기본 단위로, 다음과 같은 특징이 있습니다:

  • Transform 컴포넌트만 가지고 있어 위치, 회전, 크기 정보를 관리합니다
  • 자체적으로는 시각적 요소가 없습니다
  • 다양한 컴포넌트를 추가하여 기능을 확장할 수 있습니다
  • 다른 GameObject의 부모 역할을 할 수 있어 계층 구조를 만들 수 있습니다

오목 게임에서는 BoardInputManager 같은 빈 GameObject가 게임 로직을 관리하는 역할을 담당합니다.

Prefab(프리팹)의 개념

Prefab은 재사용 가능한 GameObject 템플릿입니다:

  • 모든 컴포넌트와 속성이 미리 설정된 GameObject의 청사진입니다
  • 씬에 여러 번 인스턴스화할 수 있습니다
  • 프리팹 원본을 수정하면 모든 인스턴스에 변경사항이 적용됩니다
  • 프로젝트 창에 저장되며, 여러 씬에서 사용할 수 있습니다

오목 게임에서는 cellPrefab(격자 칸), blackStonePrefab(흑돌), whiteStonePrefab(백돌)과 같은 프리팹을 사용했습니다.

GameObject와 Prefab 연결하기

GameObject와 Prefab의 연결은 다음과 같은 방법으로 이루어집니다:

  1. 인스펙터를 통한 참조 설정:
    public GameObject cellPrefab; // Inspector에서 드래그 앤 드롭으로 설정
    
  2. 코드를 통한 인스턴스화:
    GameObject cell = Instantiate(cellPrefab, position, Quaternion.identity);
    
  3. 부모-자식 관계 설정:
    cell.transform.SetParent(transform); // 현재 GameObject의 자식으로 설정
    

이러한 방식으로 오목 게임에서는 BoardManager 스크립트가 연결된 빈 GameObject가 프리팹을 인스턴스화하여 격자와 바둑돌을 생성합니다.

하이라키에서 제거해도 이상이 없는 것들

하이라키에서 제거해도 게임 동작에 이상이 없는 것들:

  1. 프리팹의 원본: 프리팹은 프로젝트 창에 저장되므로 하이라키에서 인스턴스를 제거해도 원본은 유지됩니다.

  2. 런타임에 생성되는 오브젝트: 게임 실행 중에 코드로 생성되는 오브젝트는 에디터 씬에 미리 배치할 필요가 없습니다. 오목 게임에서 바둑돌이 이에 해당합니다.

  3. 디버그용 임시 오브젝트: 테스트를 위해 임시로 추가한 오브젝트들

반면, 다음은 제거하면 문제가 발생할 수 있는 것들입니다:

  1. 게임 로직을 관리하는 매니저 오브젝트: BoardInputManager같은 게임의 중심 로직을 담당하는 GameObject

  2. 다른 스크립트에서 참조하는 오브젝트: FindObjectOfType 등으로 참조되는 오브젝트

  3. 기본 씬 요소: Main Camera 같은 게임 렌더링에 필수적인 요소

오목 게임 구현에서의 적용

오목 게임에서는 다음과 같이 이 개념들을 활용했습니다:

  1. 빈 GameObject를 생성하여 BoardManagerInputManager 스크립트를 부착

  2. 프리팹으로 격자 칸(Cell)과 바둑돌(Stone)을 정의

  3. 코드로 연결하여 격자를 생성하고 사용자 입력에 따라 바둑돌을 동적으로 배치

이러한 방식으로 GameObject와 Prefab의 관계를 활용하면 코드 재사용성과 게임 구조의 명확성을 높일 수 있습니다.