C++ Actor Component

Jihyun·2023년 12월 14일
0

Unreal

목록 보기
6/11
post-thumbnail

C++ 클래스 수동 생성


언리얼 엔진에서 C++ 클래스를 생성했을 때 생성하자마자 소스 파일을 열 수 없다며 에러가 나는 경우가 있다.
해당 언리얼 프로젝트 파일이 있는 폴더로 가서 언리얼 프로젝트 파일을 우클릭하면 'Generate Visual Studio project files'를 눌러 수동으로 생성해주면 해결된다.

Actor

액터란 레벨에 배치할 수 있는 오브젝트
유니티에서의 GameObject와 같다

Actor Component는 다양한 기능을 추가하는 개별 구성 요소, 자기 자신에 서브 오브젝트로 어태치 할 수 있는 특수 타입의 오브젝트이다

액터는 언리얼 게임 오브젝트의 단위이자, 컴포넌트라는 이름의 특수 타입의 오브젝트를 담는 그릇이다.

GetOwner()

코드가 속해있는 클래스의 객체 포인터를 얻어올 때 GetOwner()를 쓴다
UObject 클래스에 정의되어 있으며 현재 객체가 속한 AActor/UActorComponent의 포인터를 반환한다

AActor* ParentActor =
     MyComponent->GetOwner();

C++로 액터 컴포넌트 만들기

컴포넌트를 만들고자 하는 액터의 디테일창에서 [+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으로 설정

profile
잊어버려도 다시 리마인드 할 수 있도록 공부한 것을 기록합니다

0개의 댓글