[UE5] TIL - 34 어떻게 Actor는 원하는 위치까지 움직였다가 처음 위치로 돌아올까?

ChangJin·2024년 5월 29일
0

Unreal Engine5

목록 보기
62/114
post-thumbnail

2024-05-29

깃허브!
hhttps://github.com/ChangJin-Lee/Multiplayer-Puzzle-Platform

Udemy 언리얼 C++ 멀티플레이어 마스터 : 중급 게임 개발 강의를 수강하며 알게된 내용과 깨달은 점을 적은 글입니다.


1. Actor를 특정 지점까지 움직이기

BeginPlay에서 처음 위치를 저장해두고 Tick에서 원하는 위치까지 계속해서 업데이트하고 가까워졌을때 방향벡터가 반대로 되도록 만든다. 즉 방향벡터를 바꾸는 Swap 함수를 만들면 된다.


두 FVector 사이의 방향 구하기

  • Platform 이라는 Actor가 있다고 하자.

  • 각 위치는 GetActorLocation()으로 가져오면 된다.

  • A : 처음 위치

  • B : 타겟 위치

  • A 지점부터 B 지점까지 이동했다가 A 지점으로 돌아오게 하고 싶다.

  • 먼저 FVector 사이의 방향을 구해야한다.

    • 매 Tick마다 특정 방향으로 이동을 해야하기 때문이다.
    • 즉 direction = B - A 라는 방향 벡터가 필요하다.
    • 그리고 이 벡터를 정규화 해야한다.

  • 그럼 정규화는 왜 해야할까?

    • 정규화된 벡터란 크기가 1인 벡터이다.
    • 즉 방향을 나타내야해서 정규화를 꼭 해주어야한다.
    • 왜나면 속도를 UPROPERTY로 노출시켜서 조절하고자하기 때문이다.
  • 언리얼에서는 로컬 좌표와 월드 좌표가 차이가 나기때문에 이를 보완해주어야한다.

GlobalTargetLocation = GetTransform().TransformPosition(TargetLocation);


언리얼에서 정규화를 하는 방법

https://docs.unrealengine.com/4.26/en-US/API/Runtime/Core/Math/FVector/GetSafeNormal/

  • FVector::GetSafeNormal를 사용하면 된다.
  • 이러면 방향 벡터를 얻을 수 있다.
OriginalDirection = (GlobalTargetLocation - GlobalOriginalLocation).GetSafeNormal();


두 지점이 가까워졌는지 판단하는 방법

  • 여러가지 방법이 있는데 FVector::PointsAreNear()를 사용했다.
  • 특정 단위 거리만큼 가까워졌을때 true를 리턴하는 함수이다.
FVector::PointsAreNear(CurrentLocation, GlobalTargetLocation, 1);


액터 위치 업데이트하기

  • SetActorLocation()으로 액터의 위치를 업데이트한다.
SetActorLocation(CurrentLocation + Direction * Lambda * DeltaSeconds);
profile
게임 프로그래머

0개의 댓글