생성자와 파괴자의 기본 이해
지금까지 우리는 블루프린트를 통해 게임 월드의 오브젝트를 정의하고, 그 오브젝트들이 어떻게 상호작용하는지 알아보았습니다. 이번 절에서는 게임 오브젝트의 생명주기와 밀접하게 관련된 중요한 개념인 생성자(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장 '클래스와 객체 지향 설계'의 주요 내용을 모두 다루었습니다.