액터 : 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 |