Publish:

태그: , ,

카테고리:

Moving Platform

움직일 거리 및 속도

내가 움직이고자 하는 플랫폼의 헤더파일에 각 변수를 지정한다.

1
2
3
4
5
public:
  UPROPERTY(EditAnywhere, Category = "Moving Platform")
  FVector platformVelocity = FVector(100, 0, 0);
  UPROPERTY(EditAnywhere, Category = "Moving Platform")
  float MovedDistance = 100;

구현

움직임을 구현할 함수도 지정한다.

1
2
private:
  void MovePlatform(float DeltaTime);

이제 cpp 파일로 가서 기능을 구현한다.

내가 원하는 거리만큼만 움직이길 바라기 때문에 시작지점과 현재위치의 거리가

희망하는 거리보다 멀어지면 시작지점과 velocity 값을 반대로 바꾸어준다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
void AMovingPlatform::BeginPlay()
{
  Super::BeginPlay();
  StartLocation = GetActorLocation();
}

void AMovingPlatform::Tick(float DeltaTime)
{
  Super::Tick(DeltaTime);
  MovePlatform(DeltaTime);
}

void AMovingPlatform::MovePlatform(float DeltaTime)
{
  FVector CurrentLocation = GetActorLocation();
  CurrentLocation = CurrentLocation + platformVelocity * DeltaTime;
  SetActorLocation(CurrentLocation);

  float Distance = FVector::Dist(StartLocation, CurrentLocation);
  if(Distance > MovedDistance)
  {
    FVector MoveDir = platformVelocity.GetSafeNormal();
    StartLocation = StartLocation + MoveDir * MovedDistance;
    SetActorLocation(StartLocation);
    platformVelocity = -platformVelocity;
  }
}

결과

11

방문해 주셔서 감사합니다!😊

업데이트:

댓글남기기