Unreal Engine에서 액터란 레벨에 배치할 수 있는 오브젝트를 말한다.
이동도 할 수 있고 회전, 스케일 조절과 같은 3D 트랜스폼이 지원되며 액터들은 C++나 블루프린트를 통해서 생성하고 소멸시킬 수 있다.
C++ 코드상에서 Actor들은 앞에 A라는 접두사가 붙는데 Actor를 기반으로 클래스를 만들면 ACharacter, AMino, AMonster . . .등 이렇게 맨 앞에 A가 붙어서 생성된다.
추가적으로 액터의 3D 트랜스폼의 경우 액터가 이러한 정보들을 직접 저장하기보다는 액터의 루트 컴포넌트가 가지고 있는 트랜스폼 데이터들 사용해서 움직인다.
Unreal Engine에서 Spawn이란 Actor 클래스 인스턴스를 새로 생성하는 것을 말한다. C++에서는 UWorld::SpawnActor() 함수를 통해서 생성 가능하다.
액터는 C++, BP를 통해서 Spawn 될 수도 있지만 이미 레벨에 배치되어있는 액터들도 존재한다. (장애물이나, 캐릭터와 상호작용할 수 있는 건물들..?) 이런 액터들은 LoadMap 혹은 AddToWorld가 호출될 때 발생한다.
에디터에서 플레이 버튼을 눌렀을 때도 디스크에서 로드할 때와 유사한 방식이지만 액터를 디스크에서 로드하기보다는 에디터에 이미 존재하는 액터들을 복사하는 방식으로 로드한다.
월드 오브젝트는 액터의 레퍼런스 목록을 저장한다. 만약 Destroy() 함수를 호출해서 액터를 소멸시키고자 한다면 액터는 레벨에서 제거된 후 킬 대기상태인 Pending Kill로 마킹되고 이후 가비지 컬렉션 때 지워진다.
언리얼에서는 사용되는 가비지 컬렉션은 더 이상 참조되지 않거나 Destroy() 함수를 통해 명시적으로 소멸이 예약된 오브젝트들을 주기적으로 정리한다.
엔진은 레퍼런스 그래프라는 것을 만들어서 어떤 오브젝트가 사용중인지, 그리고 어떤 오브젝트가 고아가 되어 있는지(아마 참조되지 않는다는 뜻인것같다..)를 알아낸다.
그래프의 루트에는 "루트 세트"라고 명명된 오브젝트 세트가 존재하는데 가비지 컬렉션이 발생하면 이 루트 세트를 통해서 참조된 오브젝트들을 모조리 추적해버린다. 여기서 참조되지 않았다면 더 이상 필요하지 않은 오브젝트라고 가정되고 제거된다.
오브젝트 소멸 중 호출되는 함수들을 세 가지로 아래와 같다.