Unity는 어떻게 게임을 구성할까?
GameObject, Component, 생명주기부터 이해하기
본 블로그 작성 글들은, 강의를 목표로 하고 제작되었습니다. 또한 작성된 글의 정보도 틀렸을 수 있으니, 주의해주세요.
Unity는 게임 오브젝트에 필요한 기능을 Component로 붙여서 게임을 구성하는 엔진이다. 상속 구조를 깊게 만드는 것보다 작은 기능을 조합하는 방식에 가깝다.
GameObject는 빈 그릇에 가깝다
Scene에 보이는 캐릭터, 카메라, 조명은 대부분 GameObject다. 하지만 GameObject 하나만으로는 화면에 보이거나 움직이지 않는다.
Player GameObject
├─ Transform
├─ SpriteRenderer
├─ Rigidbody2D
└─ PlayerController
Transform은 위치와 회전, 크기를 가진다. SpriteRenderer는 이미지를 그리고, Rigidbody2D는 물리 계산에 참여한다. 개발자가 만든 C# 스크립트도 하나의 Component가 된다.
MonoBehaviour의 생명주기
Unity는 정해진 시점에 MonoBehaviour 함수를 호출한다.
using UnityEngine;
public class PlayerMover : MonoBehaviour
{
[SerializeField] private float speed = 5f;
private void Start()
{
Debug.Log("Player 준비 완료");
}
private void Update()
{
float x = Input.GetAxisRaw("Horizontal");
transform.position += Vector3.right * x * speed * Time.deltaTime;
}
}
Awake는 자신의 초기 상태를 준비할 때, Start는 첫 프레임 전에 다른 객체와 연결할 때 자주 사용한다. Update는 매 프레임 호출되므로 입력과 일반적인 갱신을 처리하기 좋다.
물리 힘을 적용한다면 고정 간격으로 호출되는 FixedUpdate를 고려한다. 모든 코드를 Update에 넣기보다 실제로 매 프레임 필요한 작업인지 먼저 확인해야 한다.
Scene과 Prefab
Scene은 현재 화면에 배치된 오브젝트들의 집합이다. Prefab은 재사용할 GameObject 구성을 에셋으로 저장한 것이다.
같은 적을 여러 번 배치할 때마다 Component를 다시 설정하지 않고 Prefab을 복제할 수 있다. 수정한 내용도 Prefab을 기준으로 여러 인스턴스에 반영할 수 있다.
Unity를 시작할 때는 Scene 하나에 플레이어, 바닥, 목표 지점만 만든 뒤 입력부터 충돌까지 한 흐름을 완성해보는 것이 좋다. GameObject가 무엇인지보다 각 Component가 어떤 책임을 가지는지 구분하는 것이 더 중요하다.