Actor

MoOrY·2022년 11월 3일
0

언리얼 엔진

목록 보기
2/41

Actor
레벨에 배치될 수 있는 모든 오브젝트의 기본 클래스
이동, 회전, 스케일과 같은 3D Transform을 지원하는 범용 클래스이다.

액터는 Transform 데이터를 직접 저장하지 않는다.
액터의 루트 컴포넌트에 트랜스폼 데이터가 존재할 경우, 그 데이터를 사용한다.

컴포넌트

액터를 컴포넌트를 담는 그릇으로 생각해 볼 수 있다.
여러 유형의 컴포넌트를 사용하여 액터의 이동 및 렌더링 방식 등을 제어 가능
액터의 또다른 주요 기능은 플레이 도중 네트워크를 통한 프로퍼티 및 함수 호출의 리플리케이션

리플리케이션Replication
네트워크 멀티플레이어 게임 처리 시 월드의 동기화 상태를 유지하는데 사용됨
모든 클라이언트에서의 게임 상태에에 대한 완벽 제어를 가능케 하기 위해
프로퍼티 값과 함수 호출 둘 다 리플리케이션 시킬 수 있다

액터의 수명주기


https://docs.unrealengine.com/4.27/ko/ProgrammingAndScripting/ProgrammingWithCPP/UnrealArchitecture/Actors/ActorLifecycle/

액터의 생성

1. 디스크에서 로드

이미 레벨에 배치된 액터에 대해서, LoadMap이 발생했을때나, AddToWorld가 호출되었을때 발생

2. 에디터에서 플레이

디스크에서의 로드와 거의 똑같지만, 액터를 디스크에서 로드하기 보단 에디터에서 복사해 온다.

3. 스폰

액터를 스폰(인스터싱)할 때 따르게 되는 경로

4. 디퍼드 스폰

스폰 시 노출Expose On Spawn 설정된 프로퍼티가 있으면
액터는 디퍼드(유예시켜 나중에 한번에 몰아서) 스폰이 가능

액터의 소멸

액터는 기본적으로 가바지 콜렉팅되지 않고, Destroy()를 호출하여 명시적으로 소멸시킬 수 있다.

Destroy소멸

액터가 킬 대기 상태로 마킹되며, 레벨의 액터 배열에서 제거됨

EndPlay플레이 종료

액터의 수명이 막바지에 다다랐음을 보증하기 위해 여러 곳에서 호출된다.
EndPlay가 호출되는 경우는 다음과 같다.

-Destroy 명시적 호출
-에디터에서 플레이 종료
-Level Transition (심리스 트래블 또는 맵 로드) = 레벨 전환
-액터가 들어있는 스트리밍 레벨 언로드
-액터의 수명 만료
-어플리케이션 종료 (모든 액터 소멸)

EndPlay 이후 액터는 RF_PendingKill 마킹되어 다음 가비지 컬렉션 주기동안 할당해제Deallocate된다.

중요 프로퍼티&함수

https://docs.unrealengine.com/5.0/en-US/API/Runtime/Engine/GameFramework/AActor/

프로퍼티

함수

bool ActorHasTag: 이 액터의 태그 배열에 파라미터로 제공된 태그가 있는지 확인
FTransform ActorToWorld : 루트 컴포넌트의 local to world 변환값 리턴
UActorComponent* AddComponent: 새 컴포넌트를 만들고 이것이 호출되는 액터에 소유권을 할당한다

void AddActorLocalOffset : 로컬 참조 프레임에서 컴포넌트에 파라미터로 제공된 델타 위치값 추가
void AddActorLocalRotation: 로컬 참조 프레임에서 컴포넌트에 파라미터로 제공된 델타 회전값 추가
void AddActorLocalTransform: 로컬 참조 프레임에서 컴포넌트에 파라미터로 제공된 델타 Transform값 추가
void AddActorWorldOffset : 월드공간에서 컴포넌트에 파라미터로 제공된 델타 위치값 추가
void AddActorWorldRotation: 월드공간에서 컴포넌트에 파라미터로 제공된 델타 회전값 추가
void AddActorWorldTransform: 월드공간에서 컴포넌트에 파라미터로 제공된 델타 Transform값 추가

void AttachToActor: 호출한 액터의 루트 컴포넌트를 제공한 액터의 루트 컴포넌트에 연결한다
void AttachToComponent: 호출한 액터의 루트 컴포넌트를 제공한 컴포넌트에 연결한다(소켓 가능)

void BeginPlay: 이 액터가 시작될때 호출되는, 재정의 가능한 함수
bool Destroy: 액터 파괴
void Destroyed: 게임플레이나 에디터에서 명시적으로 소멸될 때 호출됨. 레벨 스트리밍이나 게임플레이 종료 중에는 호출x
void EndPlay: 이 액터가 레벨에서 제거될 때마다 호출되는 재정의 가능한 함수
void EnableInput: 이 액터를 PlayerController가 처리하는 입력 스택에 푸쉬
FQuat GetActorQuat: 이 액터의 루트 컴포넌트 쿼터니언 반환
FVector GetActorRelativeScale3D: 액터의 상대적 스케일을 3D로 반환
float GetActorTickInterval: 이 액터의 기본 틱 함수의 틱 간격을 반환
float GetActorTimeDilation: 액터의 TimeDilation을 가져온다. 파라미터로 World를 넣을 수 있다
void GetAllChildActors: 모든 자식 액터들의 배열을 가져온다. 참조자 액터배열을 파라미터로 넣는다
Actor GetAttachParentActor: 루트 컴포넌트로부터 위로 올라가서 Attach된 부모 액터를 리턴
UActorComponent
GetComponentByClass: 컴포넌트 배열을 검색하고, 처음 발견된 지정된 클래스의 컴포넌트를 리턴
void GetComponents: 지정된 컴포넌트 클래스에서 파생된 모든 컴포넌트를 가져온다. 참조자 배열을 파라미터로 넣는다
float GetInputAxisValue: 이 액터에 대해 입력이 활성화 된 경우 입력 축 키의 값을 가져온다.
ULevel* GetLevle: 이 액터가 소속된 ULevel을 반환
void GetOverlappingActors: 이 액터와 겹쳐있는 모든 액터를 반환
void GetOverlappingComponents: 이 액터와 겹쳐있는 모든 컴포넌트를 반환
float GetSquaredDistanceTo: 이 액터에서 다른 액터까지의 거리의 제곱을 반환
float GetSquaredHorizontalDistanceTo: Z값을 무시하고, 이 액터에서 다른 액터까지의 거리의 제곱을 반환
float GetVerticalDistanceTo: XY값을 무시하고, 이 액터에서 다른 액터까지의 거리의 제곱을 반환
FVector GetVelocity: 무브먼트 컴포넌트를 사용하거나, 물리가 적용된 경우 속도를 반환

profile
필기용 블로그입니다.

0개의 댓글