박하의 나날

[17]액터

프로그래밍/Unreal

1)AActor

레벨에 배치할 수 있는 오브젝트는 전-부 이 클래스.

ex)AStaticMeshActor, ACameraActor, APointLight ...

AActor는 반드시 최소 하나의 USceneComponent가 들어있어야 하고, 여기에는 그 AActor에 대한

이동, 회전, 스케일이 들어있다.

액터에는 어느 컴포넌트가 루트역할을 할지 나타내는 RootComponent*도 있다.

트랜스폼(위치, 회전, 스케일) 데이터를 직접 저장하지 않고 액터의 루트 컴포넌트에 데이터가 존재하는경우,
그 데이터를 사용한다.

여러가지 유형의 컴포넌트를 사용하여 액터의 이동 및 렌더링 방식을 제어할수 있다.
또다른 기능: 플레이 도중 네트워크를 통한 프로퍼티 및 함수 호출의 리플리케이션*

AActor 수명 도중 호출할 수 있는 이벤트 : BeginPlay, Tick, EndPlay

액터의 스폰을 전담하는 메소드 UWorld::SpawnActor() 가 스폰에 성공하면 BeginPlay()호출->다음 프레임에 Tick() 호출.

*RootComponent : AActor 의 컴포넌트 트리 내 최상위 컴포넌트를 담는 AActor 멤버

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


 

2) 컴포넌트 : 생성시 자신을 포함하는 액터에 할당된다

UActorComponent

AActor의 여러 유형에 공유되는 기능, 보조하는 개별 작업을 수행한다.

특정 액터에 연관지어지고 월드의 특정지점에 존재하지는 않는다. AI나 플레이어 입력해석에 사용된다.

컴포넌트는 오직 하나의 부모 컴포넌트 또는 액터에 붙일 수 있지만, 자신에게는 여러개의 자손 컴포넌트를 붙일 수 있다.

 

USceneComponent 트랜스폼*이 있는 액터 컴포넌트.
계층구조 형태로 서로에게 붙일수 있다.

*트랜스폼:위치, 회전, 스케일로 정의되는 월드상의 포지션

 

UPrimitiveComponent mesh 또는 파티클 같은 그래픽적 표현이 있는 씬 컴포넌트. physics 및 collision세팅이 들어있다.

 

3) Destroy() : 액터가 수명이상으로 살아남았을때 호출해서 소멸시킬 수 있다.

프로세스 도중 EndPlay()가 호출되는데 여기서 소멸관련 로직을 짤 수 있다.

 

4)UStruct

그냥 구조체에 USTRUCT() 마킹을 해주면 사용가능하다.

가비지 컬렉션 대상이 아니라서 수명을 직접 관리해 줘야한다.

UStruct는 언리얼 에디터 내 편집, 블루프린트 조작, 시리얼라이제이션, 네트워크 등 UObject리플렉션이

지원되는 일반적인 데이터 유형들을 모아놓는 용도로 쓰인다.

 

 

액터스폰하기 : https://docs.unrealengine.com/latest/KOR/Programming/UnrealArchitecture/Actors/Spawning/index.html