[Unity] GameObject와 컴포넌트 이해하기: 큐브에 기능 붙이기

유니티 GameObject와 컴포넌트의 차이를 회전 큐브로 익혀요.

ChatGPT 생성 이미지

 


Unity 컴포넌트의 역할부터 구분해요

큐브 하나를 만들었는데 Inspector에 항목이 잔뜩 생겨서 어디를 건드려야 할지 막막하신가요? GameObject는 기능을 담는 대상이고, 컴포넌트(Component)는 각각의 기능을 맡아요.

회전만 멈추려면 회전 스크립트를, 모습만 숨기려면 렌더러를 조절하면 돼요.

컴포넌트는 Unity에서 씬의 대상을 구성하는 기본 단위예요.
이번에는 회전하는 큐브 하나로 기능별 스위치의 차이를 확인해요. 코드를 처음 보더라도 어느 항목을 끄면 어떤 결과가 나오는지부터 관찰하면 괜찮아요.

Unity 6 계열 중 6000.0 공식 문서와 기본 3D 씬을 기준으로 설명해요. 에디터 배치는 기본 레이아웃을 가정해요. 아래 결과는 코드로부터 예상되는 동작이며 실제 실행 기록은 아니에요.


개념 설명: GameObject와 핵심 컴포넌트 역할 비교

기능이 어디에 들어 있는지 알아야 화면이 사라진 문제와 동작이 멈춘 문제를 따로 해결할 수 있어요.

1. GameObject — 기능을 담는 대상


큐브가 어디에 속하는지 찾으려면 GameObject라는 단위가 필요해요. GameObject는 씬 안에서 이름과 활성 상태를 가지는 대상이에요. 빈 공구함에 필요한 도구를 넣듯 컴포넌트를 붙여 역할을 만들어요.

왼쪽 [Hierarchy]에서 큐브를 선택하면 오른쪽 [Inspector]에 그 구성품이 나와요. GameObject 자체의 활성 체크를 끄면 이 예제에서는 회전과 표시가 함께 중단돼요.

2. Transform — 위치·회전·크기 정보

큐브를 원하는 곳에 배치하려면 Transform의 세 값을 구분해야 해요. Transform은 위치(Position), 회전(Rotation), 크기(Scale)를 담는 컴포넌트예요. 주소와 방향표가 함께 달린 물건이라고 생각하면 쉬워요.

오른쪽 [Inspector] → [Transform]에서 세 항목을 확인할 수 있어요. 이번에는 위치와 크기를 고정하고 Rotation이 변하는지만 관찰해요.

3. Mesh Filter와 Mesh Renderer — 모양과 표시 기능

큐브가 안 보일 때 모양 데이터와 표시 기능을 구분하면 원인을 좁힐 수 있어요. Mesh Filter는 메시(Mesh), 즉 꼭짓점과 면으로 이루어진 모양 데이터를 연결해요. Mesh Renderer는 그 모양을 화면에 그리는 역할을 맡아요.

조각의 설계도와 실제 전시 조명을 나누어 생각해보세요. 오른쪽 [Inspector] → [Mesh Renderer]의 체크만 끄면 표면은 숨겨져도 회전 스크립트는 계속 작동할 수 있어요.

4. 스크립트와 Collider — 동작과 충돌 기능

움직임과 충돌은 자동으로 같은 기능이 되지 않으므로 역할을 나눠야 해요. 스크립트 컴포넌트는 직접 작성한 동작을 GameObject에 붙이는 방법이에요. Box Collider는 상자 모양의 보이지 않는 충돌 영역이에요.

모형을 돌리는 모터와 손이 닿는 외곽선을 떠올리면 둘의 차이가 보여요. 오른쪽 [Inspector]에서 두 항목을 따로 확인할 수 있고, 이번 회전 코드는 Box Collider를 사용하지 않아요.


회전하는 큐브의 표시와 동작 분리하기

회전 큐브 하나에서 ‘모습이 사라져서 동작도 멈춘 것처럼 보이는 상황’을 재현하고 Rotation 값으로 원인을 확인해요.

STEP 1. 실습용 씬과 큐브 준비

기존 작업을 저장한 뒤

① 상단 [File] 클릭 → ② [New Scene] 선택 → ③ 기본 3D 템플릿을 고르고 [Create] 클릭 순서로 새 씬을 열어요.

이어서 ① 상단 [File] 클릭 → ② [Save As] 선택 → ③ Assets/Scenes 폴더에 ComponentLab 이름으로 저장하세요.

기존 씬을 그대로 사용한다면 다른 회전·이동 스크립트가 없는 새 큐브를 만들어야 관찰이 쉬워요.

① 상단 [GameObject] 클릭 → ② [3D Object] → ③ [Cube]를 선택해요.



왼쪽 [Hierarchy]에서 이름을 ComponentCube로 바꾸세요.

오른쪽 [Inspector] → [Transform]에서 Position과 Rotation은 모두 0, Scale은 모두 1로 맞춰요.



가운데 [Scene] 탭에 마우스를 놓고 F 키를 누르면 선택한 큐브를 가까이 볼 수 있어요.

이번 실습은 Scene과 Inspector로 확인하므로 게임 카메라의 구도를 먼저 맞출 필요는 없어요.

카메라가 다른 곳을 본다고 컴포넌트 설정이 실패한 것은 아니에요.


STEP 2. 회전 코드 만들고 부착

① 하단 [Project]에서 Assets 폴더 우클릭 → ② [Create] → ③ [Folder]를 선택해 Scripts 폴더를 만들어요.



다음으로 ① Scripts 폴더 우클릭 → ② [Create] → ③ [Scripting] → ④ [MonoBehaviour Script]를 선택하세요. 이름 입력 칸이 뜨면 바로 RotateObject를 입력하고 Enter를 눌러요.



만든 뒤에 이름을 바꾸면 파일 이름과 코드 속 클래스 이름이 어긋날 수 있어요.

이름을 잘못 입력했다면 파일을 지우고 다시 만드는 편이 안전해요. 파일을 더블클릭해 C# 편집기가 열리면 기존 내용을 모두 지우고 아래 코드로 바꾼 뒤 저장해요.


using UnityEngine;


public class RotateObject : MonoBehaviour

{

    [SerializeField] private float degreesPerSecond = 45f;


    private void Update()

    {

        transform.Rotate(

            0f,

            degreesPerSecond * Time.deltaTime,

            0f,

            Space.Self

        );

    }

}


Unity로 돌아와 컴파일이 끝날 때까지 기다려요

 ① 하단 [Project]의 RotateObject 파일을 잡고 → ② 왼쪽 [Hierarchy]의 ComponentCube 위로 드래그하세요.

오른쪽 [Inspector] → [Rotate Object] → [Degrees Per Second]가 45인지 확인해요.



이 코드는 Unity가 프레임마다 호출하는 Update에서 자신의 Transform을 회전시켜요. Time.deltaTime은 직전 프레임에 흐른 게임 시간이므로 초당 회전량을 프레임별 회전량으로 바꿔줘요. Space.Self는 큐브 자신의 축을 사용한다는 뜻이에요.


STEP 3. 정상 상태의 기준 잡기

① 상단 가운데 삼각형 [Play] 버튼 클릭 → ② 왼쪽 [Hierarchy] → [ComponentCube] 선택 → ③ 오른쪽 [Transform] → [Rotation] 확인 순서로 진행해요.큐브 표면이 보이면서 Y 회전값이 변하는 것이 기준 상태예요.

시작부터 값이 멈춰 있다면 오른쪽 [Rotate Object]의 체크와 속도 45를 확인하세요. 상단 가운데 두 줄 모양 [Pause] 버튼이 켜져 있어도 진행이 멈춰요. 상단 [Window] → [General] → [Console]에서 빨간 컴파일 오류가 있으면 먼저 해결해야 해요.

STEP 4. 보이지 않지만 회전하는 상황 재현

① 오른쪽 [Inspector] → [Mesh Renderer] 제목 옆 체크 해제 → ② [Transform] → [Rotation] 값 확인 순서로 진행해요. 큐브 표면이 사라져도 Rotation 값은 계속 변해야 해요. 선택 윤곽선이나 편집용 기즈모가 남는 것은 렌더링된 표면과 다른 표시예요.

여기서 오브젝트가 삭제됐다고 판단하기 쉬워요. 실제 원인은 표시 기능만 껐기 때문이에요. 같은 [Mesh Renderer] 체크를 다시 켜면 회전하는 큐브 표면을 볼 수 있어요.

STEP 5. 회전만 멈춘 뒤 전체 활성 상태 비교

① 오른쪽 [Rotate Object] 제목 옆 체크 해제 → ② Rotation 값 확인 → ③ 체크 다시 켜기 순서로 비교해요. 체크를 끈 동안에는 큐브가 보이지만 Rotation의 변화가 멈춰야 해요. 다시 켜면 회전을 이어가요.

다음으로 ① 오른쪽 [Inspector] 맨 위 오브젝트 이름 왼쪽의 활성 체크 해제 → ② 큐브 표면과 Rotation 확인 → ③ 체크 다시 켜기 순서로 진행해요. 체크를 끈 동안에는 큐브 표면과 회전 업데이트가 함께 중단돼야 해요. 마지막에 앞선 두 컴포넌트의 체크도 켜진 상태인지 확인해요.

STEP 6. 예상 결과와 저장 상태 확인

비교할 것은 ‘보이는가’와 ‘Rotation이 변하는가’ 두 가지예요. Mesh Renderer만 끈 경우에는 보이지 않아도 값이 변하고, Rotate Object만 끈 경우에는 보여도 값이 멈춰요. 전체 비활성에서는 둘 다 중단돼야 해요.

① 상단 가운데 [Play]를 다시 눌러 실행 종료 → ② 상단 [File] → [Save]로 씬 저장 순서로 마무리해요. 실행 중 바꾼 씬 오브젝트 설정은 보통 편집 상태로 돌아가므로 유지할 값은 실행 종료 후 다시 입력하세요. 저장해두면 다음에는 같은 시작 상태에서 비교할 수 있어요.


  • RotateObject 스크립트를 큐브에 붙일 수 없어요
    • 먼저 상단 [Window] → [General] → [Console]에서 첫 번째 빨간 오류를 확인해요.
    • 파일 이름은 RotateObject.cs, 코드의 클래스 이름은 RotateObject로 같아야 해요.
    • 스크립트를 만든 뒤 이름을 바꿨거나 코드를 붙여넣을 때 중괄호를 빠뜨렸는지도 살펴보세요.
    • 컴파일이 끝나면 ① 하단 [Project]의 파일을 잡고 → ② 왼쪽 [Hierarchy] → [ComponentCube]로 다시 드래그해요.
    • 이후 오른쪽 [Inspector]에 [Rotate Object]가 나타나야 부착 단계가 끝난 거예요.
  • Rotation은 변하는데 Game 화면에서는 큐브가 안 보여요
    • Rotation 값이 바뀐다면 적어도 회전 코드가 Transform을 변경하고 있다는 뜻이에요.
    • 오른쪽 [Inspector] → [Mesh Renderer]의 체크를 켜고 가운데 [Scene]에서 먼저 표면을 확인해요.
    • Scene에서는 보이는데 Game에서만 안 보이면 게임 카메라가 큐브를 보고 있는지 살펴보세요.
    • ① 왼쪽 [Hierarchy] → [Main Camera] 선택 → ② 오른쪽 [Transform]에서 위치와 방향을 확인하면 돼요.
    • Scene의 편집 시점을 움직이는 것과 게임 카메라를 움직이는 것은 별개의 작업이에요.
  • Play를 끄면 바꾼 회전 속도가 왜 원래 값으로 돌아오나요?
    • 일반적인 Play Mode에서는 실행 중 씬 오브젝트에 가한 변경이 종료 후 되돌아와요.
    • 실행 중 조절은 시험 운전 중 속도를 비교하는 과정이라고 생각하면 쉬워요.
    • 예를 들어 90으로 바꿔 빠른 회전을 확인했다면 그 숫자를 따로 기억해두세요.
    • ① 상단 가운데 [Play]를 눌러 편집 상태로 돌아오기 → ② 오른쪽 [Rotate Object] → [Degrees Per Second]에 90 입력 순서로 진행해요.
    • ③ 상단 [File] → [Save]로 씬을 저장하고 다시 실행하면 저장한 시작값으로 비교할 수 있어요.

표시·동작·활성 상태를 나눠 확인해요
큐브가 이상하게 보일 때는 GameObject 전체보다 문제를 맡은 컴포넌트부터 살펴보세요.

GameObject는 기능을 담는 대상이고 컴포넌트는 각 기능을 맡아요.
Mesh Renderer와 회전 스크립트는 서로 다른 일을 해요.
결과는 화면 모습과 Inspector 값 두 가지로 함께 확인해요.

이 구분이 익숙해지면 이동과 체력처럼 다른 기능도 나눠 붙이기 쉬워져요.
창 이름이 헷갈리면 Scene·Game·Hierarchy·Inspector 설명과 함께 비교해보세요.

이 블로그의 인기 게시물

[Notion] 노션에서 페이지 간 링크 연결하는 방법 총정리

[Notion] 노션 문서 PDF로 저장하는 방법

[Notion] 노션 기본 템플릿 5가지 소개와 활용 팁