언리얼 엔진에서 C++ 클래스를 생성했을 때 생성하자마자 소스 파일을 열 수 없다며 에러가 나는 경우가 있다.
해당 언리얼 프로젝트 파일이 있는 폴더로 가서 언리얼 프로젝트 파일을 우클릭하면 'Generate Visual Studio project files'를 눌러 수동으로 생성해주면 해결된다.
액터
란 레벨에 배치할 수 있는 오브젝트
유니티에서의 GameObject와 같다
Actor Component
는 다양한 기능을 추가하는 개별 구성 요소, 자기 자신에 서브 오브젝트로 어태치 할 수 있는 특수 타입의 오브젝트이다
액터는 언리얼 게임 오브젝트의 단위이자, 컴포넌트라는 이름의 특수 타입의 오브젝트를 담는 그릇이다.
코드가 속해있는 클래스의 객체 포인터를 얻어올 때 GetOwner()를 쓴다
UObject
클래스에 정의되어 있으며 현재 객체가 속한 AActor/UActorComponent의 포인터를 반환한다
AActor* ParentActor =
MyComponent->GetOwner();
컴포넌트를 만들고자 하는 액터의 디테일창에서 [+Add]-[New C++ Component]를 선택한다.
void UMover::BeginPlay()
{
Super::BeginPlay();
//소유 액터의 현재 위치를 가져와 OriginalLocation에 저장
OriginalLocation = GetOwner()->GetActorLocation();
}
void UMover::TickComponent(float DeltaTime, ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction)
{
Super::TickComponent(DeltaTime, TickType, ThisTickFunction);
//이동
//소유 액터의 현재 위치를 가져 온다
FVector CurrentLocation = GetOwner()->GetActorLocation();
//TargetLocation은 현재 위치에서 MoveOffset만큼의 떨어진 거리이다
FVector TargetLocation = OriginalLocation + MoveOffset;
//일정한 거리를 일정한 시간 동안 이동하기 위한 속도
float speed = FVector::Distance(OriginalLocation, TargetLocation) / MoveTime;
//일정 시간 동안 현재 위치에서 목표 위치까지 일정한 속도로 이동한다
//파라미터로 현재 위치, 목표 위치, 델타 타임, 보간 속도가 들어간다
FVector NewLocation = FMath::VInterpConstantTo(CurrentLocation, TargetLocation, DeltaTime, speed);
GetOwner()->SetActorLocation(NewLocation);
}
액터의 Mobility를 Movable로 설정해주고 MoveOffset을 400으로 설정