20250204 언리얼 왕복 이동 구현

초보 게임개발자·2025년 2월 4일
0

UnrealEngine

목록 보기
7/18

오늘은 언리얼에서 C++을 활용해서 위치를 변경해 왕복 이동을 하는 오브젝트를 구현해 봤습니다.
Tick(float DeltaTime 과 MoveSpeed, MaxRange, StartLocation등을 고려해서 일정 범위를 벗어나면 이동 방향을 반전 시키는 로직을 구성했습니다.



헤더파일안에
MoveSpeed,MaxRange,bMovingForward와 초기위치,이동방향 관련 로직들을 선언해 줬습니다.
각 로직들을에 대해서 간략하게 설명을 하면

  • MoveSpeed:
    MoveSpeed는 캐릭터나 오브젝트가 이동하는 속도를 나타내는 변수입니다. 일반적으로 초당 이동 거리로 표현되며, 이 값이 클수록 더 빠르게 이동합니다. 예를 들어, MoveSpeed가 600이라면, 캐릭터는 1초에 600 유닛을 이동합니다.

  • MaxRange:
    MaxRange는 캐릭터나 오브젝트가 이동할 수 있는 최대 거리입니다. 이 값은 특정 행동이나 공격의 범위를 제한하는 데 사용될 수 있습니다. 예를 들어, 공격 범위가 1000 유닛이라면, 캐릭터는 그 범위 내에서만 공격할 수 있습니다.

  • bMovingForward:
    bMovingForward는 캐릭터가 현재 앞으로 이동 중인지 여부를 나타내는 불리언 변수입니다. 이 값이 true이면 캐릭터가 앞으로 이동하고 있다는 의미이며, false이면 정지하거나 다른 방향으로 이동하고 있다는 의미입니다. 이 변수를 사용하여 애니메이션이나 이동 로직을 제어할 수 있습니다.

  • FVector StartLocation:
    FVector StartLocation은 언리얼 엔진에서 3D 공간 내의 위치를 나타내는 구조체인 FVector 타입의 변수입니다. 이 변수를 초기 위치를 저장하는 데 사용하며 주로 아래와 같은 이유로 사용된다고 합니다.

3D 위치 표현:
FVector는 X, Y, Z 좌표를 포함하여 3D 공간에서의 위치를 표현합니다. 이를 통해 게임 내에서 오브젝트나 캐릭터의 정확한 위치를 지정할 수 있습니다.
초기 위치 저장:
StartLocation 변수를 사용하여 캐릭터나 오브젝트의 초기 위치를 저장함으로써, 게임이 시작될 때 또는 특정 이벤트가 발생할 때 해당 위치로 되돌리거나 참조할 수 있습니다. 예를 들어, 캐릭터가 특정 행동을 수행한 후 다시 초기 위치로 돌아가야 할 경우 유용합니다.
이동 및 로직 제어:
초기 위치를 저장함으로써, 이후의 이동 로직이나 상태를 제어하는 데 도움을 줄 수 있습니다. 예를 들어, 캐릭터가 특정 범위를 벗어나지 않도록 하거나, 특정 조건이 충족되었을 때 초기 위치로 리셋하는 등의 기능을 구현할 수 있습니다.
디버깅 및 테스트:
초기 위치를 명시적으로 저장하면, 게임 개발 중 디버깅이나 테스트를 할 때 유용합니다. 개발자는 StartLocation을 통해 캐릭터가 예상한 위치에 있는지 확인할 수 있습니다.
상태 관리:
게임 내에서 여러 상태를 관리할 때, 초기 위치를 저장해 두면 상태 전환 시 원래 위치로 돌아가는 로직을 쉽게 구현할 수 있습니다. 예를 들어, 특정 스킬 사용 후 원래 위치로 돌아가야 하는 경우에 유용합니다.

  • bool bMovingForward:
    bool bMovingForward는 일반적으로 언리얼 엔진에서 캐릭터나 오브젝트의 이동 상태를 나타내는 불리언 변수입니다.


그러고 소스파일로 돌아와서 각가 이동 속도와 이동범위 그리고 bool bMovingForward = true 로 설정해서 오브젝트가 앞으로 이동하고 있다는 상태를 나타내줬습니다.

마지막으로 틱 함수 내부에 현재위치,이동거리, 방향등를 구현해주는 코드를 작성했습니다.

    1. FVector CurrentLocation = GetActorLocation();:
      현재 액터의 위치를 가져옵니다. GetActorLocation() 함수는 액터의 현재 위치를 FVector 형태로 반환합니다.
    1. float DistanceMoved = FVector::Dist(StartLocation, CurrentLocation);:
      시작 위치(StartLocation)와 현재 위치(CurrentLocation) 간의 거리를 계산합니다. FVector::Dist 함수는 두 점 사이의 유클리드 거리를 반환합니다. 이 값은 액터가 얼마나 이동했는지를 나타냅니다.
    1. if (DistanceMoved >= MaxRange):
      이동한 거리가 최대 범위(MaxRange)를 초과하는지 확인합니다. 만약 초과하면, 액터의 이동 방향을 반전시킵니다.
    1. bMovingForward = !bMovingForward;:
      bMovingForward 변수를 반전시켜 이동 방향을 변경합니다. true일 경우 앞으로 이동하고, false일 경우 뒤로 이동하게 됩니다.
    1. float Direction = bMovingForward ? 1.0f : -1.0f;:
      현재 이동 방향에 따라 Direction 변수를 설정합니다. bMovingForward가 true이면 1.0f (앞으로 이동), false이면 -1.0f (뒤로 이동)로 설정됩니다.
    1. FVector NewLocation = CurrentLocation + FVector(0, Direction MoveSpeed DeltaTime, 0);:
      새로운 위치를 계산합니다. 현재 위치에 이동 속도(MoveSpeed)와 프레임 간격(DeltaTime)을 곱한 값을 더하여 새로운 위치를 결정합니다. 이 경우, Y축 방향으로만 이동하고 있습니다.
    1. SetActorLocation(NewLocation);:
      계산된 새로운 위치(NewLocation)로 액터의 위치를 업데이트합니다. SetActorLocation 함수는 액터의 위치를 설정하는 데 사용됩니다.

그리고
FVector NewLocation = CurrentLocation + FVector(0, Direction MoveSpeed DeltaTime,0); 에서
(0, Direction MoveSpeed DeltaTime,0) = 앞뒤로 이동
(Direction MoveSpeed DeltaTime,0,0) = 좌우로이동
(0,0 Direction MoveSpeed DeltaTime) = 위아래 이동
이런 식으로 원하는 방향에 맞게 x,y,z 값을 조정하면 쉽게 방향을 바꿀수 있었습니다.


큰 이상 없이 잘 작동 되는걸 확인하고 스크린샷 찍어서 올려봤습니다.
열심히 움직이고 있습니다. 아무튼 그렇습니다

profile
기록은 기억을 지배한다!

0개의 댓글

관련 채용 정보