생성자와 파괴자의 기본 이해
지금까지는 블루프린트로 게임 월드 오브젝트를 정의하고 상호작용을 구성하는 방법을 다뤘습니다. 이번 절에서는 오브젝트 생명주기와 밀접한 생성자(Constructor)와 파괴자(Destructor)를 살펴봅니다. 두 개념은 오브젝트 생성/파괴 시 자동 호출되며, 초기 설정과 정리 작업에 사용됩니다.
생성자: 오브젝트의 탄생과 초기화
생성자와 파괴자의 기본 이해에서 노드 흐름, 값 전달, 실행 결과를 정리한 것입니다.
생성자(Constructor)는 액터가 게임 월드에 생성될 때 자동으로 한 번 호출되는 특별한 부분입니다. 액터가 탄생하는 순간에 필요한 모든 초기 설정 작업을 수행하는 데 사용됩니다.
블루프린트에서 액터의 생성자 역할을 하는 주요 이벤트는 다음과 같습니다.
Event BeginPlay- 개념: 이 이벤트는 해당 액터가 게임 월드에 배치되고 게임이 시작될 때 (또는 시뮬레이션이 시작될 때) 정확히 한 번 실행됩니다.
- 주요 용도: 게임 플레이 중 필요한 초기화 작업에 가장 일반적으로 사용됩니다. 예를 들어, 플레이어의 초기 체력 설정, UI 초기화, 적 AI의 첫 행동 트리거, 컴포넌트 간의 레퍼런스 설정 등이 있습니다.
- 특징: 이 이벤트는 게임이 실제로 시작되었을 때만 발생하므로, 에디터 상에서 액터를 배치하거나 수정하는 동안에는 실행되지 않습니다.
Construction Script (건설 스크립트)- 개념: 이 스크립트는 액터가 게임 월드에 생성되거나, 에디터에서 해당 액터를 이동/수정할 때마다 실시간으로 실행됩니다.
- 주요 용도: 에디터에서 액터의 외형이나 동작을 즉시 시각적으로 확인하고 싶을 때 유용합니다. 예를 들어, 문의 방향을 변경했을 때 문틀이 함께 움직이거나, 아이템의 색상을 변경했을 때 바로 적용되는 등의 프리뷰 기능을 구현할 때 사용됩니다. 또한, 특정 조건에 따라 컴포넌트를 동적으로 추가/제거하는 등의 에디터 타임 로직에도 활용됩니다.
- 특징:
Construction Script는Event BeginPlay보다 먼저 실행되며, 에디터에서의 변경 사항에도 반응합니다. 단,Construction Script에서 설정된 변수 값은 게임 플레이 시점에서Event BeginPlay에서 다시 변경될 수 있습니다.
Event BeginPlay에서 플레이어의 현재 체력을 100으로 설정하고, 시작 메시지를 출력합니다.Construction Script에서 특정 변수(예:DoorType열거형)의 값에 따라 문의 스태틱 메시지를 변경하도록 설정하여, 에디터에서DoorType을 바꾸자마자 문의 모습이 즉시 바뀌는 것을 확인합니다.
파괴자: 오브젝트의 소멸과 마무리
파괴자(Destructor)는 액터가 게임 월드에서 제거되거나 파괴될 때 자동으로 한 번 호출되는 특별한 부분입니다. 액터가 사라지는 순간에 필요한 정리 작업을 수행하는 데 사용됩니다.
블루프린트에서 액터의 파괴자 역할을 하는 주요 이벤트는 다음과 같습니다.
Event EndPlay
- 개념: 이 이벤트는 해당 액터가 게임 월드에서 제거되거나 게임이 종료될 때 한 번 실행됩니다. 액터가
Destroy Actor노드를 통해 명시적으로 파괴될 때도 호출됩니다. - 주요 용도: 액터가 사라지기 전에 필요한 마무리 작업에 사용됩니다. 예를 들어, 사운드를 정지시키거나, 특정 이펙트를 제거하거나, 액터가 점유하고 있던 리소스(메모리 등)를 해제하는 등의 작업을 수행합니다.
- 특징: 이 이벤트는 게임 플레이 도중 액터가 사라질 때 또는 게임이 완전히 끝날 때 발생하므로, 매우 중요한 정리 작업을 담당합니다.
- 적이 파괴될 때
Event EndPlay에서 폭발 효과음과 파티클 이펙트를 재생하고, 이 적이 남긴 아이템을 드롭하는 로직을 구현합니다. - 플레이어가 게임을 종료하거나 레벨을 변경할 때, 사용하던 UI 위젯을 제거하는 로직을
Event EndPlay에서 처리합니다.
생성자와 파괴자의 중요성
생성자와 파괴자를 올바르게 이해하고 활용하는 것은 다음과 같은 이유로 매우 중요합니다.
- 안정성: 오브젝트 생성 시 필요한 초기화가 누락되거나, 파괴 시 리소스 해제가 제대로 이루어지지 않으면 게임이 비정상적으로 작동하거나 메모리 누수와 같은 심각한 문제를 야기할 수 있습니다.
- 효율성: 불필요한 리소스 점유를 막고, 게임 성능을 최적화하는 데 기여합니다.
- 재현성: 오브젝트가 항상 일관된 상태로 생성되고 파괴되도록 보장하여, 디버깅을 용이하게 합니다.
Construction Script, Event BeginPlay, Event EndPlay 이 세 가지는 액터의 생명주기에서 중요한 전환점에 해당하며, 각자의 역할에 맞게 적절한 로직을 배치하는 것이 견고한 블루프린트를 만드는 데 필수적입니다. 이들을 통해 액터가 월드에 나타나고 사라지는 과정을 완벽하게 제어할 수 있습니다.
이번 절에서는 블루프린트에서 액터의 생성과 파괴를 담당하는 Construction Script, Event BeginPlay, Event EndPlay의 기본 개념과 활용법에 대해 알아보았습니다. 이로써 3장 클래스와 객체 지향 설계의 주요 내용을 모두 다루었습니다.
블루프린트 품질 점검
이 절의 내용은 노드를 많이 배치하는 것보다 흐름을 명확히 유지하는 데 목적이 있습니다.
- 이벤트 시작점에서 종료점까지 실행 경로를 소리 내어 설명해 봅니다.
- 분기 조건이 늘어날 때는 함수 분리 기준을 먼저 정하고 그래프를 정리합니다.
마지막으로 생성과 파괴 로직을 실제 블루프린트에 배치하기 전, 실행 시점과 정리 책임을 함께 점검합니다.
생성자와 파괴자 흐름을 실행 시점별로 구분하는 루틴을 추가합니다.
생성자와 파괴자를 이해할 때는 에디터 구성, 플레이 시작, 제거 후처리 시점을 나누어 초기화 책임을 정리합니다.