C# 개발 공부 1일

규수·2026년 2월 23일

개발 공부 일지

목록 보기
1/44

그동안 언리얼 엔진과 C++을 통해 객체 지향의 기초를 다졌다면, 오늘부터는 유니티 엔진과 C#을 활용한 게임 개발 공부를 시작합니다. 유니티 개발의 가장 기본이 되는 유니티 생명주기(Unity LifeCycle)에 대해 정리해 보겠습니다.

1) 유니티 생명주기(LifeCycle)란?

유니티의 모든 스크립트는 MonoBehaviour 클래스를 상속받으며, 특정 시점에 자동으로 호출되는 일련의 함수들을 가집니다. 이를 생명주기라고 부릅니다. 이 흐름을 정확히 알아야 버그 없는 게임 로직을 설계할 수 있습니다.

2) 초기화 및 활성화 단계

1. Awake

스크립트 객체가 생성될 때 가장 먼저 호출되는 함수입니다.

  • 동작 시점: 스크립트가 비활성화되어 있어도 게임 오브젝트가 활성화되어 있다면 호출됩니다.
  • 사용 예시: 변수 초기화, 싱글톤 패턴 설정, 다른 컴포넌트 참조 가져오기.

2. OnEnable

오브젝트가 활성화될 때마다 호출되는 함수입니다.

  • 동작 시점: Awake 이후, 혹은 게임 도중 오브젝트가 꺼졌다가 켜질 때마다 실행됩니다.
  • 사용 예시: 이벤트 구독(Event Subscription), 특정 상태 초기화.

3.Start

첫 번째 프레임 업데이트가 시작되기 직전에 호출됩니다.

  • 동작 시점: 모든 Awake가 완료된 후 호출되며, 생애 단 한 번만 실행됩니다.
  • 사용 예시: 다른 객체의 데이터 참조, 초기 게임 로직 시작.

3) 업데이트 루프 (Update Loop)

1.FixedUpdate

프레임 속도와 상관없이 고정된 시간 간격으로 호출됩니다.

  • 동작 시점: 물리 연산이 일어나기 직전에 실행됩니다.
  • 사용 예시: Rigidbody를 이용한 이동, 힘(Force) 적용 등 물리 관련 로직.

2.Update

매 프레임마다 호출되는 가장 일반적인 함수입니다.

  • 동작 시점: 프레임률에 따라 실행 횟수가 달라집니다.
  • 사용 예시: 캐릭터 이동 입력, 타이머 계산, 키보드/마우스 입력 처리.

3.LateUpdate

모든 Update 함수가 실행된 후 마지막으로 호출됩니다.

  • 동작 시점: Update가 끝나고 화면이 렌더링되기 직전입니다.
  • 사용 예시: 캐릭터 이동 후의 카메라 추적, 다른 로직이 끝난 뒤의 데이터 처리.

4) 비활성화 및 해제

1.OnDisable

오브젝트나 스크립트가 비활성화될 때 호출됩니다.

  • 동작 시점: 활성화 상태에서 꺼지는 순간 실행됩니다.
  • 사용 예시: 이벤트 구독 해제, 불필요한 계산 중단.

5) 실행 순서

using UnityEngine;

public class LifeCycleTest : MonoBehaviour
{
    private void Awake()
    {
        Debug.Log("Awake: 초기화 시작");
    }

    private void OnEnable()
    {
        Debug.Log("OnEnable: 오브젝트 활성화");
    }

    private void Start()
    {
        Debug.Log("Start: 게임 로직 준비 완료");
    }

    private void FixedUpdate()
    {
        // 물리 연산 (기본 0.02초 간격)
    }

    private void Update()
    {
        // 일반 로직 처리
        if (Input.GetKeyDown(KeyCode.Space))
        {
            Debug.Log("Update: 점프 입력 확인");
        }
    }

    private void LateUpdate()
    {
        // 카메라 추적 등 최종 처리
    }

    private void OnDisable()
    {
        Debug.Log("OnDisable: 오브젝트 비활성화");
    }
}

0개의 댓글