<언리얼 C++> RandRange와 VRandCone의 차이

2026. 5. 7. 11:24Unreal

 소총의 산탄범위를 늘리는 코드를 작성하는 중, RandRange와 비슷한 VRandCone을 사용하게 되어 이 차이를 정리해보려고 한다.

 

RandRange와 VRandCone의 차이점?

FMath::RandRange(Min, Max)
  → 단일 숫자 반환 (float 또는 int)

FMath::VRandCone(중심방향, 각도)
  → 3D 벡터(FVector) 반환

 

두 함수는 랜덤값을 반환한다는 점은 같지만, 반환 타입이 다르다.

 

그래서 라인트레이스를 사용할 때 RandRange를 사용해도 동작은 하지만 코드가 상당히 길어진다.

 

두 코드 비교

먼저 RandRange를 사용했을 때의 코드이다.

// RandRange로 산탄 방향 만들기 
FVector BaseDirection = GetActorForwardVector();

// 1. 랜덤 각도 2개 생성 (Yaw, Pitch)
float RandomYaw = FMath::RandRange(-SpreadAngle, SpreadAngle);
float RandomPitch = FMath::RandRange(-SpreadAngle, SpreadAngle);

// 2. 그 각도만큼 회전한 방향 계산
FRotator BaseRotation = BaseDirection.Rotation();
BaseRotation.Yaw += RandomYaw;
BaseRotation.Pitch += RandomPitch;
FVector RandomDir = BaseRotation.Vector();

다음과 같이 각도값을 각각 작성해서 그 각도만큼 회전 방향도 계산해야한다.

 

이 코드를 VRandCone을 사용하면

FVector RandomDir = FMath::VRandCone(BaseDirection, FMath::DegreesToRadians(SpreadAngle));

이 한 줄로 끝낼 수 있다.


결과값

이 두 함수는 반환값 외에도 결과값이 조금 다르다.

 

먼저 RandRange이다.

□□□□□
□□□□□    ← 정사각형 영역 안에서 균등 분포
□□□□□

 

이와 다르게 VRandCone은 다음과 같다.

    ◯◯◯
  ◯◯◯◯◯   ← 원뿔(원) 영역 안에서 분포
    ◯◯◯

 

총기의 산탄 로직을 작성할땐 저런 사각형 형태보다 원 형태가 더 자연스럽기 때문에 RandRange보다 VRandCone이 더 적합하다고 생각했다.

 

이 외에도 여러가지 Rand함수가 있다.

 


Rand함수 정리

RandRange 단일 숫자 데미지 분산, 일반 랜덤
VRandCone 3D 방향 벡터 발사 방향, 산탄
VRand 단위 구 안 랜덤 벡터 완전 랜덤 방향
RandPointInBox 박스 내 랜덤 위치 스폰 위치