본문 바로가기
게임 프로그래밍/유니티(2021.3 LTS) 강좌

[유니티] 인스펙터 창과 컴포넌트 및 스크립트 컴포넌트 추가

by 레오란다 2022. 10. 13.
반응형

1. 인스펙터 (Inspector) 와 컴포넌트

유니티에서 오브젝트는 기본적으로 아무런 형태가 정의되어 있지 않은 빈 껍데기입니다. 여기에 여러 가지 컴포넌트를 접목하여 구체화시키게 됩니다. 오브젝트의 형태, 위치, 크기, 색상 등은 모두 컴포넌트의 속성 값에 따라 달라지게 됩니다. 아래의 그림은 이전 글에서 생성한 큐브를 선택했을 때의 인스펙터 창입니다. 

 

인스펙터 창

유니티에서 큐브를 생성하면 필요한 컴포넌트들이 연결된 오브젝트가 생성되는 것입니다.

(각 컴포넌트의 보다 자세한 정보를 보시려면 더보기를 클릭해 주세요.)

더보기

큐브 생성 후 선택하면 볼 수 있는 인스펙터 창에는 Transform, Cube (Mesh Filter), Mesh Renderer, Box Collider 컴포넌트가 연결되어 있는 것을 확인하실 수 있습니다. 여기에 포함된 컴포넌트들은 앞으로 게임을 개발할 때 매우 자주 보게 될 컴포넌트들이기 때문에 각각 어떤 역할을 하는지 살펴보도록 하겠습니다.

  • Transform: Position, Rotation, Scale 3가지 속성을 갖는 오브젝트의 기본 컴포넌트입니다.
    • 이전 글에서 진행한 씬 에서 tool 을 이용하여 오브젝트의 위치 변경, 회전, 크기를 변경하면 인스펙터 창에 보이는 각 속성 값의 수치들이 변경됩니다. 인스펙터 창에서 직접 숫자를 변경하면 씬 창에 있는 해당 오브젝트가 속성 값에 맞게 변경되는 것을 보실 수 있습니다.
  • Cube (Mesh Filter): 이 컴포넌트의 이름은 Cube 가 아닌 Mesh Filter 입니다. Mesh Filter 는 객체가 표현할 3차원 모델링 데이터(Mesh) 를 지정할 수 있는 컴포넌트입니다.
    • 현재 Mesh Filter 에 연결된 Mesh 가 큐브 모델 이기 때문에 씬에 큐브 모양이 보이는 것입니다. 여기서 큐브가 아닌 다른 Mesh 데이터를 선택하면 씬에는 큐브가 아닌 선택한 3D 모델이 보이게 됩니다. * Mesh 는 3차원 모델의 정보를 담고 있는 데이터입니다. *
  • Mesh Renderer: 이 컴포넌트는 Mesh 데이터가 렌더링 될 때 사용되는 컴포넌트입니다.
    • 렌더링이란 씬을 Game 화면에 표시하기 위해 처리되는 일련의 작업을 의미합니다.
    • Mesh Renderer 는 Mesh Filter 컴포넌트에서 mesh 데이터 (Cube, Sphere 등) 와 Transform 컴포넌트에서 position, rotation, scale 정보를 취합하여 렌더링합니다.
    • Mesh Renderer는 다음과 같은 속성을 포함합니다.
Materials 물체를 렌더링할 때 사용되는 material을 설정합니다.
Dynamic Occlusion Occlusion 은 렌더링할 때 카메라에 보이지 않는 3D 객체는 렌더링하지 않음으로써 성능을 향상시킬 수 있는 기능입니다. 
Lightning 렌더링할 때 광원(빛)과 오브젝트와의 관계를 어떻게 처리할 것인지 설정합니다. 그림자를 생성할지 아니면 다른 오브젝트에서 생성된 그림자를 표현해 줄지의 여부를 설정할 수 있습니다.
Probes 씬의 광원과 오브젝트와의 관계에 대한 정보는 실시간으로 처리할 수도 있지만 성능을 위해 미리 계산하여 두는 경우가 많습니다. (이를 베이킹 한다고 표현합니다.) 프로브는 광원 정보를 베이킹할 때 씬의 빈 공간에 대한 광원 정보를 측정하는데 사용됩니다. 여기서의 프로브 설정은 위의 설명과 같이 만들어진 프로브를 이용해 광원과 오브젝트간의 처리를 어떠한 방식으로 할 것인지에 대한 것입니다.
Motion Vectors 각 프레임 별로 해당 오브젝트가 이동한 벡터의 정보입니다.
  • Box Collider: 이 컴포넌트는 다른 객체와의 충돌 여부를 확인하는데 사용되는 컴포넌트입니다. Box Collider 는 육각형 박스 형태의 충돌 체크기입니다. 이 외에 다양한 형태의 collider 들이 있습니다.
  • Material: Mesh를 렌더링 할 때 질감/색상/Texture 등의 속성 정보를 제공합니다. 똑같은 Mesh 데이터에 어떤 material 을 사용하는지, 또 어떤 속성 값을 사용하는지에 따라 다양하게 표현될 수 있습니다.

 

이해를 돕기 위해 빈 오브젝트를 생성하고 수동으로 컴포넌트를 연결하여 큐브와 같은 오브젝트를 만들어 보도록 하겠습니다.

 

2. 빈 오브젝트와 컴포넌트 추가로 큐브 오브젝트 만들기

  • 큐브를 생성할 때 사용했던 방법 중 하나인 Hierarchy 창에서 마우스 오른쪽 버튼을 누르면 나타나는 컨텍스트 메뉴에서 이번엔 "Create Empty" 항목을 선택합니다. 그러면 아래의 그림과 같이 빈 오브젝트가 만들어집니다. 빈 오브젝트는 씬에 존재할 수 있는 모든 유니티 오브젝트의 기초인 GameObjectTransform 컴포넌트로 구성되어 있습니다.

빈 게임 오브젝트 생성

 

  • 아래의 그림과 같이 인스펙터 창에서 [Add Component] > Mesh > Mesh Filter 를 차례대로 선택하여 Mesh Filter를 추가합니다. 큐브 오브젝트의 인스펙터 창과 달리 "[none] (Mesh Filter)" 라고 되어있는 것을 보실 수 있습니다. 아직 Mesh Filter 컴포넌트에 어떠한 Mesh 데이터도 연결되지 않았기 때문입니다. 이제 빨간색 네모 박스 부분을 유니티의 인스펙터 창에서 클릭해 주면 Mesh 데이터 목록 창이 열립니다.

Mesh Filter 추가

 

  • 아래의 그림과 같이 별도 창에 나타난 Mesh 데이터 목록 중 "Cube" 를 선택하면 Mesh Filter 에 Cube 데이터가 연결된 것을 보실 수 있습니다. 하지만 Scene 창을 봐도 여전히 큐브는 보이지 않습니다. 이는 화면에 출력하는 역할을 담당하는 Mesh Renderer 컴포넌트가 아직 연결되지 않았기 때문입니다.

Mesh Filter 에 Cube Mesh 데이터 연결

 

  • 인스펙터  창에서 [Add Component] > Mesh > Mesh Renderer를 차례대로 선택하여 Mesh Renderer를 오브젝트에 추가해 줍니다. 이제 Scene 창을 보면 아래와 같이 Cube가 렌더링 되어 나타납니다. 하지만 큐브 오브젝트를 생성했던 것과 다르게 큐브가 분홍색으로 나옵니다. 이는 Mesh Renderer 에 연결된 Material 이 없기 때문입니다.

Scene 창에 렌더링 된 큐브

 

  • 위의 그림에서 빨간색 테두리 부분을 누르면 아래의 그림과 같은 Material 목록 창이 나타납니다. Default-Material 을 선택하시면 됩니다.

Material 설정 후 렌더링 된 큐브

이제 큐브 오브젝트를 생성했을 때와 동일한 모습의 큐브가 Scene 창에 보입니다. 다른 점은 Box Collider 뿐입니다. Box Collider 컴포넌트의 유무는 당장 어떠한 영향도 끼치지 못합니다. Collider 컴포넌트는 다른 오브젝트와의 충돌 체크에 사용되는 컴포넌트이기 때문입니다. 추가하고 싶으신 분은 인스펙터 창의 [Add Component] > Physics 를 클릭하시면 찾으실 수 있습니다.

 

유니티를 이용한 게임 개발은 이와 같이 오브젝트를 만들고 컴포넌트를 추가하는 형태로 만들어지게 됩니다. 여기에 게임에 생명력을 불어넣기 위해서는 코드를 작성할 수 있는 스크립트 컴포넌트를 추가하여야 합니다.

 

2. 스크립트 컴포넌트 추가

시작하기 전에 먼저 스크립트가 무엇인지부터 알아보도록 하겠습니다.

 

스크립트는 유니티를 이용해 제작하는 모든 프로그램에서 핵심적인 역할을 합니다. 게임은 일반적으로 사용자의 입력과 그에 반응하는 형태로 플레이가 이루어집니다. 또, 폭발, 화면 흔들림 등의 연출 효과, 적들의 인공지능과 각종 이벤트 등의 다양한 요소들이 결합하여 하나의 게임을 이루게 됩니다. 스크립트는 이러한 처리를 위해 작성하는 프로그래밍 코드입니다. 유니티에서는 스크립트 작성을 위한 언어로 C# 이 사용됩니다. 

 

오브젝트에 스크립트 추가는 다음과 같은 과정으로 이루어집니다.

 

  1. 스크립트를 추가할 오브젝트 선택
  2. 인스펙터 창에서 [Add Component] > New Script 선택
  3. 스크립트의 이름을 입력할 수 있는 칸이 나타나면 적절한 이름 입력
  4. [Create and Add] 버튼 클릭

인스펙터를 이용한 스크립트 추가

 

앞서 생성한 큐브에 스크립트를 추가했습니다. 스크립트의 이름은 CubeHandler 입니다. 아래는 CubeHandler 스크립트를 추가한 후의 인스펙터 창의 변화된 모습입니다.

 

CubeHandler 스크립트가 추가된 Inspector 창

 

붉은색 테두리를 보면 생성한 CubeHandler 스크립트 컴포넌트가 추가된 것을 확인하실 수 있습니다. 지금은 추가된 스크립트가 어떠한 동작도 하지 않는 상태입니다. 이 스크립트가 의미를 갖기 위해선 C# 언어를 이용해 직접 코드를 작성해야 합니다.

 

코드 작성을 위해 Visual Studio 등과 같은 툴이 필요합니다. Visual Studio 는 코드를 작성하고 오류를 수정 (디버깅이라고 부릅니다) 할 수 있는 기능을 제공하는 별도 프로그램입니다. 유니티를 설치할 때 Visual Studio 2019 Community 버전을 같이 설치했기 때문에 그림의 화살표가 가리키는 부분을 더블 클릭하면 CubeHandler의 소스 코드가 아래와 같이 Visual Studio 에서 열리게 됩니다.

 

Visual Studio 2019

여기까지 오브젝트와 컴폰넌트의 관계 및 스크립트 컴포넌트를 추가하고 코드를 개발할 수 있는 준비 단계까지 알아보았습니다. 다음 글에서 간단한 C# 스크립트를 작성해보고 게임을 실행 시켰을 때 어떻게 반영되는지 알아보도록 하겠습니다.

반응형

댓글