본문 바로가기

프로그래밍/Unreal

[UE4] 액터

액터 : public AActor

기본 오버라이드 메쏘드

virtual void BeginPlay() override;

virtual void Tick( float DeltaSeconds) override;



액터는 여러개의 기능 컴포넌트들로 구성되며, 여러 컴포넌트 중 어떤 컴포넌트가 루트인지 나타내는 

RootComponent 속성을 제공한다.

UActorComponent

USceneComponent

UPrimitiveComponent


 



메시 컴포넌트 선언

UPROPERTY()

class USeletalMeshComponent* MeshComponent;



생성자에서 서브 오브젝트 생성 하고, 루트 컴포넌트로 지정

MeshComponent= CreateDefaultSubobject<USeletalMeshComponent>(TEXT("MyItem"));

RootComponent = item;



메시와 같이 리소스를 사용하는 경우 해당 리소스 적용 : static하게 설정하는 경우

path의 경우 Game 이 Content 를 가리킨다.


static ConstructorHelpers::FObjectFinder<USkeletalMesh> CharacterAsset(TEXT ("/Game/Character/SK_Character"));


if( CharacterAsset.Succeeded() )

{

MeshComponent->SetSkeletalMesh(CharacterAsset.Object);

}


이처럼 정적으로 리소스 위치를 지정하면 소스에 리소스가 고정되어 버리므로 유지보수가 어려워진다.

객체만 생성해 놓고 블루프린트로 상속받아 블루프린트에서 리소스를 설정하는 형태로 사용한다.





SPawn

동적으로 액터를 생성


생성할 액터 클래스 설정 : 에디터에서 스폰될 오브젝트를 변경할 수 있도록 UPROPERTY 설정 해준다.

UPROPERTY(EditAnywhere)

TSubclassOf<class MyObject> SpawnObject;




SomeObject::SpawnFunction()

{

if( SpawnObject == NULL ) return;


UWorld* const World = GetWorld();


if( World == NULL ) return;


FActorSpawnParameters SpawnParams;

SpawnParams.Owner = this;

SpawnParams.Instigator = Instigator;


FVector Location = MyPosComponent->Bouds.Origin;

World->SpawnActor<MyObject>(SpawnObject, Location, SpawnParams);

 


}


블루프린트 액터 스폰

클래스로 액터 스폰 : Spawn Actor from Class




액터 찾기

GetAllActorsOfClass

찾을 액터 클래스 정의, Out Actors 에 해당 액터의 배열 리턴

ForEachLoop 사용해 각 액터 마다 필요한 처리 추가



특정 액터 찾기 : 태그 사용

액터에 태그 추가 - 배열로 여러개의 태그 추가 가능

Get (Utilities - Array - Get) 으로 해당 인덱스의 태그 얻음

ActorHasTag로 태그 여부 확인해 Branch 로 조건 추가

특정 태그만 처리하려면 Equal(string) 사용




Actor Transform


보통 액터의 루트 컴포넌트는 Scene Component 로 구성되는데, Scene Component 에는 Transform 관련 메쏘드들을 지원한다. Mesh Component역시 Scene Component를 상속받으므로 선택해 사용하면 된다.


AddLocalRotation

AddLocalTransform

AddRelativeRotation

AddRelativeLocation

SetRelativeRotation

SetRelativeLocationAndRotation

.

.


Add는 현재 상태에 추가, Set은 해당 값으로 변경




단순한 쿼터니언 회전

// 회전값

FRotator AddRot(0f, 3f, 0f);


FTransform Transform = Actor->GetTransform();

Transform.ConcatenateRotation( AddRot.Quaternion() );

Transform.NormalizeRotation();

Actor->SetActorTransform(Transform);



FTransform 는 변형에 관한 메쏘드들을 제공하는데, 오버라이딩된 연사자등을 사용해 직접 계산이 가능하다.






블루프린트

Actor->GetComponentByClass : Scene Component -> AddRelativeRotation <- MakeRotator 




변형에 에니메이션을 주고자 하는 경우 

Tick 이벤트나 TimeLine을 사용해 시간대별로 변형함수를 호출해 주면 된다.




두벡터간의 각도(내적)

A->Normalize

B->Normalize


DotProduct->ACos(degrees)







'프로그래밍 > Unreal' 카테고리의 다른 글

[UE4] 폰트  (0) 2017.09.26
[UE4] C++ 에셋, 오브젝트 레퍼런싱/객체생성  (1) 2017.09.25
[UE4] CSV 파일  (0) 2017.09.24
[UE4] unreal delegate  (0) 2017.09.24
[UE4] 마우스 입력  (0) 2017.09.17
[UE4] 아웃라인 : 스텐실  (0) 2017.09.16
[UE4] 메쉬 외곽선 효과  (0) 2017.09.15
[UE4] 언리얼 기본 예제 분석  (0) 2017.09.13
[UE4] Line Trace  (0) 2017.09.12
[UE4] C++ 기본 사항 노트  (0) 2017.09.06