AddActorWorldOffset vs AddActorWorldOffset

김민수·2025년 1월 22일

언리얼 C++

목록 보기
18/32

1. AddActorWorldOffset

액터의 월드 좌표(World Space) 기준으로 위치를 변경한다.

  • 월드 공간에서의 절대적인 축을 기준으로 동작한다. (X, Y, Z 축은 항상 고정)
  • 액터의 회전 상태(로컬 축)에 상관없이, 월드 좌표를 따라 이동한다.
FVector Offset(100.f, 0.f, 0.f); // X축 방향으로 100만큼 이동
MyActor->AddActorWorldOffset(Offset);

액터가 어떤 방향을 바라보고 있든 상관없이, 월드 좌표 기준 X축 방향으로 100만큼 이동한다.


2. AddActorWorldOffset

액터의 로컬 좌표(Local Space) 기준으로 위치를 변경한다.

  • 액터의 로컬 축(현재 방향)을 기준으로 동작한다.
  • 만약 액터가 회전되어 있다면, 이동 방향도 회전된 축에 따라 달라진다.
FVector Offset(100.f, 0.f, 0.f); // 로컬 X축 방향으로 100만큼 이동
MyActor->AddActorLocalOffset(Offset);

코드 상에서는 X축 기준으로 100만큼 이동하지만, 만약 액터가 90도 회전한 상태라면, 이 이동은 월드 좌표의 Y축 방향으로 100만큼 이동한다.


3. 차이점

구분AddActorWorldOffsetAddActorLocalOffset
기준 축월드 좌표 (World Space)로컬 좌표 (Local Space)
회전 영향 여부액터의 회전 상태와 관계없음액터의 회전 상태에 따라 이동 방향이 달라짐
사용 사례절대적인 이동 경로가 필요한 경우액터의 방향에 따라 상대적으로 이동이 필요한 경우

4. 사용 시 주의사항

  1. 충돌 처리 옵션:
    두 함수 모두 Sweep 매개변수를 지원하며, 이를 사용하면 이동 중에 충돌을 감지할 수 있다.
FVector Offset(100.f, 0.f, 0.f);
FHitResult Hit;
MyActor->AddActorWorldOffset(Offset, true, &Hit);

Sweep 값을 true로 설정하면, 이동 중 충돌이 발생한 경우 이를 감지하고 Hit에 결과를 저장한다.

  1. 함수 호출 빈도 관리:
    이 함수들은 일반적으로 틱(프레임)마다 호출되기도 하는데, 너무 잦은 호출은 성능에 영향을 줄 수 있다.
    따라서, 이동 로직을 최적화하거나 필요 시 물리 기반 이동 방식(예: AddForce, SetVelocity)을 고려해야 한다.

5. 사용 예시

월드 공간에서의 이동

AddActorWorldOffset은 월드 좌표에서 이동해야 하는 경우에 유용하다.
예를 들어, 플레이어가 고정된 X축 방향으로 무조건 이동해야 하는 런닝 게임에서 사용할 수 있다.

void AMyCharacter::MoveForward(float DeltaTime)
{
    FVector Offset(100.f * DeltaTime, 0.f, 0.f);
    AddActorWorldOffset(Offset, true);
}

로컬 축을 기준으로 이동

AddActorLocalOffset은 캐릭터가 바라보는 방향을 따라 이동해야 할 때 유용하다.
예를 들어, 비행기나 차량처럼 방향에 따라 이동 방향이 달라지는 경우 사용할 수 있다.

void AMyVehicle::DriveForward(float DeltaTime)
{
    FVector Offset(100.f * DeltaTime, 0.f, 0.f);
    AddActorLocalOffset(Offset, true);
}
profile
안녕하세요

0개의 댓글