Actor, 액터란 레벨에 배치할 수 있는 오브젝트를 말합니다. 액터는 이동, 회전, 스케일과 같은 3D 트랜스폼을 지원하는 범용 클래스입니다. 액터는 게임플레이 코드(C++ 또는 블루프린트)를 통해 생성(스폰) 및 소멸 가능합니다. C++ 에서 AActor 는 모든 액터의 베이스 클래스입니다.
액터에는 여러가지 유형이 있으며, 몇 가지 예를 들면 다음과 같습니다: StaticMeshActor, CameraActor, PlayerStartActor.
참고로 액터는 트랜스폼 (위치, 회전, 스케일) 데이터를 직접 저장하지 않으며, 액터의 루트 컴포넌트에 트랜스폼 데이터가 존재하는 경우, 그 데이터를 사용합니다.
액터 생성
AActor
클래스 인스턴스를 새로 생성하는 것을 Spawn (스폰)이라 합니다. 그 방법은 범용 함수 SpawnActor()
나, 그 특수 템플릿 버전을 사용하면 됩니다.
게임플레이에 쓸 AActor
클래스 인스턴스를 생성하는 여러가지 방법에 대한 상세 정보는 액터 스폰하기 문서를 참고하세요.
컴포넌트
액터 는 한 편으로 보면, Component (컴포넌트) 라 불리는 특수 유형 Object (오브젝트)를 담는 그릇으로 생각해 볼 수 있습니다. 여러가지 유형의 컴포넌트를 사용하여 액터 의 이동 및 렌더링 방식 등을 제어할 수 있습니다. 액터 의 또다른 주요 기능은, 플레이 도중 네트워크를 통한 프로퍼티 및 함수 호출의 리플리케이션 입니다.
컴포넌트는 생성시 자신을 포함하고 있는 액터에 할당됩니다.
컴포넌트 핵심 유형 몇 가지입니다:
- UActorComponent 액터 컴포넌트
베이스 컴포넌트입니다. 액터의 일부로 포함 가능합니다. 원한다면 Tick 시킬 수 있습니다. 액터 컴포넌트는 특정 액터에 연관지어지나, 월드의 특정 지점에 존재하지는 않습니다. 일반적으로 개념적 기능, 이를테면 AI 나 플레이어 입력 해석과 같은 것에 사용됩니다.
- USceneComponent 씬 컴포넌트
씬 컴포넌트는 트랜스폼이 있는 액터 컴포넌트입니다. 트랜스폼은 위치, 회전, 스케일로 정의되는 월드상의 포지션을 나타냅니다. 씬 컴포넌트는 계층구조 형태로 서로에게 붙일 수 있습니다. 액터의 위치, 회전, 스케일은 계층구조의 루트에 위치한 씬 컴포넌트에서 취할 수 있습니다.
- UPrimitiveComponent 프리미티브 컴포넌트
일정한 형태의 (메시 또는 파티클 시스템과 같은) 그래픽적 표현이 있는 씬 컴포넌트를 말합니다. 여기에는 재미난 피직스 및 콜리전 세팅이 들어있습니다.
액터는 씬 컴포넌트 계층구조를 갖는 것을 지원합니다. 각 액터 에는 어느 컴포넌트가 액터 의 루트 역할을 할 것인지 나타내는 RootComponent
프로퍼티도 있습니다. 액터 자체는 트랜스폼 정보가 없기에 위치, 회전, 스케일이 없습니다.
대신, 그 컴포넌트, 좀 더 구체적으로 루트 컴포넌트의 트랜스폼에 의존합니다. 이 컴포넌트가 씬 컴포넌트 인 경우, 액터 에 대한 트랜스폼 정보를 제공해 줍니다.
아닌 경우, 액터 에는 트랜스폼 정보가 없습니다. 부착된 다른 컴포넌트에는, 부착된 그 컴포넌트를 기준으로 한 트랜스폼 정보가 있습니다.
액터와 계층구조 예제는 이렇습니다:
GoldPickup 액터 |
계층구조 |
---|---|
|
|
틱
Tick (틱)이란 언리얼 엔진에서의 액터 업데이트 방법을 일컫습니다. 모든 액터는 매 프레임, 또는 최소, 또는 사용자 정의 간격마다 틱을 하여 필요한 동작이나 계산을 업데이트할 수 있습니다.
액터 는 모두 기본적으로 Tick()
함수를 통해 틱 가능합니다.
ActorComponent 역시, TickComponent()
함수를 사용해야 한다는 점이 다르지만, 기본적으로 업데이트 가능합니다.
자세한 정보는 컴포넌트 문서를 참고하세요.
수명
게임에서의 액터 생성/소멸 관련 상세 정보는 액터 틱 문서를 참고하세요.
리플리케이션
Replication (리플리케이션)은 네트워크 멀티플레이어 게임 처리시 월드의 동기화 상태를 유지하는 데 사용됩니다. 모든 클라이언트에서의 게임 상태에 대한 완벽 제어를 가능하게 하기 위해, 프로퍼티 값과 함수 호출 둘 다 리플리케이트시킬 수 있습니다.
액터 소멸
액터는 일반적으로 가비지 콜렉팅되지 않는데, 월드 오브젝트가 액터 레퍼런스 목록을 저장하기 때문입니다. 액터는 Destroy()
를 호출하여 명시적으로 소멸시킬 수 있습니다. 그러면 레벨에서 제거되어
pending kill (킬 대기) 상태로 마킹, 잠시 후 다음 가비지 컬렉션 때 지워진다는 뜻입니다.