[20260115] GameObject & Prefab

SmartBear·2026년 1월 15일

오브젝트

  • 씬 위에 있는 모든 것들은 "게임 오브젝트" 이다.
    • 심지어 모델이 보이지 않고 상호작용만 도와주는 오브젝트도 있다!

컴포넌트

  • 컴포넌트는 오브젝트의 기능을 정의 하는 것.

GameObject

  • Script 에서 GameObject를 불러오기 위한 클래스.
using UnityEngine;

public class Study : MonoBehaviour
{
    public GameObject target;  // 다른 GameObject 연결시

    void Start()
    {
        Debug.Log("Start 호출");
        // 내 GameObject 는 `gameObject`로 호출 가능
        Debug.Log($"{gameObject.name} -> {target.name}");
    }
}

씬(Scene)

  • 특정 게임 화면. 타이틀, 스코어보드등 모든 화면이 씬으로 관리된다.
  • 맵 로딩시 여러 씬을 한번에 불러와 보여주는 기법도 있다.

빌드(빌드 설정)

  • 빌드시 어떤 씬을 포함 시킬 것인지 추가할 수 있다.
  • 씬을 추가하면 씬에 Index가 추가되게 된다.
  • 씬 변경시 이름으로도 가능하며 Index로도 가능하다.
using UnityEngine;
using UnityEngine.SceneManagemet;

public class SceneChanger : MonoBehaviour
{
    void Update() 
    {
        if (Input.GetKeyDown(KeyCode.P))
        {
            // GetActiveScene 메소드를 통해 현재 동작중인 씬에 대한 정보 획득 가능.
            if (SceneManager.GetActiveScene().buildIndex == 0)
                // 인덱스를 이용해서 변경
                SceneManager.LoadScene(sceneBuildIndex: 1);
            else
                SceneManager.LoadScene(sceneBuildIndex: 0);            
            // SceneManager.LoadScene("ForTest"); // 이름을 이용해서 변경
        }
    }
}

C# Script

클래스 변수는 접근 한정자 및 옵션에 따라 인스팩터에 보여줄 수 있으며, 보이는 값은 Unity Editor 에서 직접 변경 가능하다.
클래스 변수 앞에 대괄호와 함께 사용하는 옵션을 Attribute라고 부른다.

public class CubeController : MonoBehaviour
{
    [Header("이것은 해더")]
    [SerializeField] private int _health;
    public int id;
    [SerializeField][Range(0, 50)] private int _speed = 10;
    [field:SerializeField] public int Mana { get; set; }

    [Space(10)]
    [Tooltip("이건뭐냐")] public GameObject target;
    [TextArea()] public string Description;
}
  • 기본 private 은 인스팩터에 보이지 않는다.
    • 단, SerializeField를 사용하면 인스팩터에 보이게 된다.
  • 기본 public 은 인스팩터에 보인다.
    • Property 로 정의한 경우 기본은 보이지 않지만, SerializeField를 통해 보이게 할 수 있다.
  • 알면 편한 Attribute
    • Header; 인스팩터 스크립트 내 변수 관리가 편해진다. 게임 자체엔 영향 없음.
    • Range; 변수를 유니티 화면서에서 그래그로 변경할 수 있다.
    • Space; 변수간 간격. 게임 자체엔 영향 없음.
    • TextArea; 설명처럼 여러줄 넣어야 하는 경우
    • 그 밖에: 외부 블로그 링크

Prefab

  • Object를 대량 생산 할 수 있는 일종의 설계도
    • Prefab like Class
  • Prefab또한 Instance화를 시킬 수 있다.
  • 이미 만든 오브젝트를 Assets 로 옮기면 Prefab 으로 변환된다.
  • 혹은 Assets 에서 Prefab 을 따로 생성해도 된다.
  • 생성된 Prefab 에는 여러 메타 데이터가 있기 때문에 협업시 주의 해야 한다.

생성과 파괴

  • Instantiate() 를 이용해 생성 가능. 오버로딩 가능.
  • Destory()를 통해 파괴 가능. 오버로딩 가능.

조금 더 상세 내용은 추후 시간 날때 따로 정리 합니다

profile
Python Dev with Infra -> Game Programmer

0개의 댓글