UE5 PuzzlePlatform] 왕복 이동

정우·2022년 9월 2일
0

[UE5 C++]

목록 보기
2/2
post-thumbnail

PuzzlePlatform 왕복 이동

최종 코드

FVector GlobalTargetLocation;
FVector GlobalStartLocation;
#include "MovingPlatforms.h"

AMovingPlatforms::AMovingPlatforms()
{
	PrimaryActorTick.bCanEverTick = true;

	SetMobility(EComponentMobility::Movable);
}

void AMovingPlatforms::BeginPlay()
{
	Super::BeginPlay();

	if (HasAuthority()) { 
		SetReplicates(true); 
		SetReplicateMovement(true); 
	}

	GlobalStartLocation = GetActorLocation();
	GlobalTargetLocation = GetTransform().TransformPosition(TargetLocation);
}

void AMovingPlatforms::Tick(float dt)
{
	Super::Tick(dt);

	if (HasAuthority()) {
		FVector Location = GetActorLocation();
		float journeyLength = (GlobalTargetLocation - GlobalStartLocation).Size();
		float journeyTravelied = (Location - GlobalStartLocation).Size();

		if (journeyTravelied >= journeyLength) 
		{
			FVector Swap = GlobalStartLocation;
			GlobalStartLocation = GlobalTargetLocation;
			GlobalTargetLocation = Swap;
		}
		FVector Direction = (GlobalTargetLocation - GlobalStartLocation).GetSafeNormal();
		Location += Speed * dt * Direction;
		SetActorLocation(Location);
	}
}

결과물


원리

  • TargetLocation은 상대적인 위치로서 계속 변화한다. 따라서 월드 공간에서의 위치를 사용하여 두 위치를 반복하는 것이 필요하다.
  • 그래서 GlobalStartLocation과 GlobalTargetLocation을 선언하여 두 위치를 반복하는 형태를 구현한다.
  • 이동하고있는 현재 위치의 벡터와 처음위치에서 목표위치까지의 벡터 사이를 비교하며 Swap을 이용하여 목표와 처음위치를 바꾼다.
profile
개발 일기장

0개의 댓글