내일배움캠프 강의 CH3 1주차 5강 내용에 액터의 라이프 사이클이 나와 '이득우의 언리얼 C++ 게임 개발의 정석' 책 3장 내용을 추가로 정리했습니다.
액터는 내부적으로 여러 종류의 컴포넌트를 조합해 만들지만, 게임플레이 관점에서는 하나의 배우서 게임 콘텐츠에 기여합니다. 게임이 시작될 때 액터는 준비와 게임 참여 그리고 퇴장의 과정을 거칩니다.
액터의 준비 과정이라는 것은 액터를 구성하는 모든 컴포넌트의 세팅이 완료돼 게임이라는 무대에 비로소 나설 수 있게 되는 것을 의미합니다. 액터에 속한 모든 컴포넌트의 세팅이 완료되면 언리얼 엔진은 액터의 PostInitializeComponents 함수를 호출합니다.
준비된 액터는 이제 비로소 게임에 참여하게 되는데, 이때부터 액터는 자신에게 주어진 역할을 수행합니다. 언리얼 엔진은 액터가 게임에 참여할 때 액터의 BeginPlay 함수를 호출하고, 매 프레임마다 액터의 Tick 함수를 호출합니다.
그러다가 게임에서 더 이상 액터의 역할이 없어지면, 액터는 게임에서 퇴장하고 메모리에서 소멸합니다. 액터가 게임에서 퇴장할 때 언리얼 엔진은 액터의 EndPlay를 호출합니다.
위 내용을 더 자세하게 설명하면
언리얼 엔진의 Actor는 생성 → 초기화 → 월드 배치 → Tick(실행) → 제거 순으로 동작하며, 이를 지원하기 위해 여러 함수가 자동 호출됩니다.
1. 생성자 (Constructor)
- C++ 클래스 객체가 메모리에 생성될 때 단 한 번 호출됩니다.
- 아직 월드에 완전히 등록된 상태가 아니므로, 다른 액터나 월드 관련 기능은 안전하게 호출하기 어렵습니다.
- 보통 컴포넌트 생성(CreateDefaultSubobject) 및 기본 변수 초기화에 사용합니다.
2. PostInitializeComponents()
- 액터의 모든 컴포넌트가 생성·초기화를 마친 뒤 자동으로 호출됩니다.
- 컴포넌트들이 이미 준비된 상태이므로, 컴포넌트 간 상호작용 초기화 코드를 넣기 좋습니다.
3. BeginPlay()
- 게임이 시작(Play 모드)되거나, 런타임 중 액터가 새로 생성(Spawn)되는 순간에 한 번 호출됩니다.
- 이 시점에서는 월드와 다른 액터들이 준비된 상태이므로, 자유롭게 상호작용 코드를 작성할 수 있습니다.
- AI, 게임 모드, 플레이어 컨트롤러 등 다른 시스템과의 연동도 보통 이 시점에 처리합니다.
4. Tick(float DeltaTime)
- 매 프레임마다 반복 호출되며, 실시간 업데이트가 필요한 로직(캐릭터 이동, 물리 연산 등)을 넣습니다.
- 불필요한 액터에는 Tick을 끄고, 이벤트 기반으로 전환하면 성능을 절약할 수 있습니다.
5. Destroyed()
- Destroy() 함수를 직접 호출해 액터를 제거할 때 직전에 호출됩니다. (단, 게임 종료나 레벨 전환 시에는 호출되지 않을 수 있음)
- 보통 EndPlay에서 주요 정리를 마치고, Destroyed()에서 메모리 해제나 사운드/파티클 정리 등 최종 작업을 수행합니다.
- Destroyed가 불리면 마지막에 EndPlay도 같이 호출됩니다.
6. EndPlay(const EEndPlayReason::Type EndPlayReason)
- 액터가 더 이상 월드에서 활동하지 않을 때 (파괴, 게임 종료, 레벨 전환 등) 호출됩니다.
- EEndPlayReason::Type은 언리얼 엔진에서 EndPlay 함수가 호출되는 이유를 나타내는 열거형(enum) 타입입니다.
- 이 함수에서 자원 해제나 상태 저장을 처리합니다.
관련해서 더 자세한 내용은 아래 공식 문서에서 확인할 수 있습니다.
https://dev.epicgames.com/documentation/ko-kr/unreal-engine/unreal-engine-actor-lifecycle
'내일배움캠프 > TIL' 카테고리의 다른 글
[내일배움캠프 Day27] 플레이어 이동 처리하기 (1) | 2025.01.23 |
---|---|
[내일배움캠프 Day26] C++ 6주차 과제 진행 (1) | 2025.01.22 |
[내일배움캠프 Day24] 개발 환경 설정 (1) | 2025.01.20 |
[내일배움캠프 Day23] CH2 팀 프로젝트 (3) | 2025.01.17 |
[내일배움캠프 Day18] 인라인 함수(inline function) (2) | 2025.01.10 |