//1번 코드
FVector Velocity = GetVelocity();
Velocity.Normalize(0.0001);
FVector ActorLocation = GetActorLocation();
FVector TargetLocation = ActorLocation + Velocity * distance;
DodgeToLocation(TargetLocation);
두가지의 코드를 비교해 보자
//2번 코드
// 현재 속도 가져오기
FVector Velocity = GetVelocity();
// 속도가 0이 아닐 경우 방향을 정규화
FVector DodgeDirection = Velocity.GetSafeNormal();
if (!DodgeDirection.IsNearlyZero()) // 방향이 0이 아니면
{
// 거리만큼 벡터 곱하기
FVector DodgeTargetLocation = GetActorLocation() + (DodgeDirection * distance);
// Dodge 실행
DodgeToLocation(DodgeTargetLocation);
}
텔레포트를 쓸때 내가 쓰는 코드인데, 둘다 똑같은 코드라는 것을 알 수 있다.
하지만 어느 것이 더 안전한가? 바로 2번 코드이다. (값이 0에 수렴하는 값이 있을경우의 이야기이다.)
상황에 따라 안전한 경우가 다르겠지만 위 코드는 이동중에 dash 키를 눌렀고, 그 방향벡터에 따라서 일정 거리만큼 teleport를 하는 코드인데
왜 2번 코드가 더 안전한지 생각해보자
< 나의 답변 >
- GetSafeNormal()은 벡터의 길이가 0일 경우 자동으로 (0,0,0) 반환하여 예외 처리 불필요.
- Normalize()는 벡터의 크기가 0일 때 변경되지 않으며 경고가 발생할 수 있음.
- GetSafeNormal()은 실제 방향 벡터를 반환하므로 안정적인 결과 보장.
'Unreal Engine 5' 카테고리의 다른 글
| Event Interface (0) | 2025.06.23 |
|---|---|
| 언리얼 Widget에서 Billboard 를 사용하는법 (0) | 2025.01.31 |
| 언리얼 엔진에서의 메모리 관리 방식 (0) | 2025.01.29 |
| 언리얼에서 Bind<BindUFunction VS AddDynamic> (0) | 2025.01.29 |
| 언제 TOptional 과 TMap 을 사용해야할까? (0) | 2025.01.28 |