FMath

2025. 2. 1. 02:02·Unreal/Unreal For C++

FMath는 언리얼 엔진(UE5)에서 수학 관련 기능을 제공하는 정적(Static) 유틸리티 클래스입니다.
벡터 연산, 삼각 함수, 랜덤 값 생성, 보간(Lerp) 등 다양한 수학적 연산을 수행하는 함수들을 포함하고 있습니다.

언리얼 엔진에서 기본적으로 제공하는 float 기반의 수학 함수를 제공하며,
일반적으로 FMath:: 네임스페이스를 통해 호출하여 사용합니다.


FMath의 주요 기능

기본 연산 관련 함수

FMath는 기본적인 수학 연산 함수들을 제공합니다.

FMath::Abs(절댓값 계산)

`Abs()` 함수는 주어진 숫자의 절댓값(Absolute Value)를 반환합니다.

절댓값이란 음수를 양수로 변환하는 연산입니다.

static FORCEINLINE float Abs(float A);
static FORCEINLINE double Abs(double A);
static FORCEINLINE int32 Abs(int32 A);
  • 입력한 A의 절댓값을 반환합니다.
  • `float`, `double`, `int32` 타입을 지원합니다.

📝 예제

float PositiveValue = FMath::Abs(-10.5f);  // 결과: 10.5
int AbsValue = FMath::Abs(-25);            // 결과: 25

✅ 사용 사례:

  • 캐릭터의 체력, 속도 등 절댓값이 필요한 상황에서 활용
  • 벡터 연산에서 음수를 제거하고 거리 계산 등에 활용

FMath::Clamp (값을 특정 범위로 제한)

`Clamp()` 함수는 값을 최소(Min), 최대(Max) 범위 내에 제한하는 역할을 합니다.

template<typename T>
static FORCEINLINE T Clamp(T X, T Min, T Max);
  • `X`값이 Min보다 작으면 Min을 반환, Max보다 크면 Max를 반환
  • `X`값이 범위 내에 있다면 그대로 반환

📝 예제

float ClampedValue1 = FMath::Clamp(120.0f, 0.0f, 100.0f);  
// 결과: 100.0f (120이 100을 초과하므로 100으로 제한)

float ClampedValue2 = FMath::Clamp(-50.0f, 0.0f, 100.0f);  
// 결과: 0.0f (-50이 최소값 0보다 작으므로 0으로 제한)

float ClampedValue3 = FMath::Clamp(75.0f, 0.0f, 100.0f);  
// 결과: 75.0f (범위 안에 있으므로 변경 없음)

✅ 사용 사례:

  • 플레이어 체력 (Health) 제
CurrentHealth = FMath::Clamp(CurrentHealth, 0.0f, MaxHealth);
  • UI의 게이지 값 제한 (0 ~ 1 사이로 유지)
float Alpha = FMath::Clamp(BlendFactor, 0.0f, 1.0f);
  • 카메라 줌 레벨 제한
CurrentZoom = FMath::Clamp(CurrentZoom, MinZoom, MaxZoom);

 


 

FMath::Min / Max (최소 & 최대값 비교)

`Min()`과 `Max()` 함수는 두 개의 값 중에서 최소값 또는 최대값을 반환합니다.

template<typename T>
static FORCEINLINE T Min(T A, T B);

template<typename T>
static FORCEINLINE T Max(T A, T B);
  • `Min(A, B)`: 두 값 중 더 작은 값 반환
  • `Max(A,B)`: 두 값 중 더 큰 값 반환

📝 예제

float MinValue = FMath::Min(3.5f, 7.2f);  // 결과: 3.5
int MaxValue = FMath::Max(10, 25);        // 결과: 25

✅ 사용 사례:

  • 플레이어 최소/최대 속도 제한
CurrentSpeed = FMath::Max(0.0f, CurrentSpeed - 10.0f);  // 속도가 음수가 되지 않도록 제한
  • NPC 간 거리 계산 후 최단 거리 찾기
float ClosestDistance = FMath::Min(DistanceA, DistanceB);

 


 

FMath::Sign (부호 반환, 양수/음수 판별)

`Sign()` 함수는 입력값의 부호를 반환합니다.

template<typename T>
static FORCEINLINE T Sign(T Value);
  • 양수일 경우 1 반환
  • 음수일 경우 -1 반환
  • 0일 경우 0반환

📝 예제

float SignValue1 = FMath::Sign(25.0f);  // 결과: 1.0
float SignValue2 = FMath::Sign(-10.0f); // 결과: -1.0
float SignValue3 = FMath::Sign(0.0f);   // 결과: 0.0

✅ 사용 사례:

  • 캐릭터 방향을 결정할 때
float Direction = FMath::Sign(PlayerVelocity.X);  
// → X 축 속도가 양수면 1, 음수면 -1 (오른쪽/왼쪽 방향 판단)
  • 카메라 회전 방향 결정
float RotationDirection = FMath::Sign(MouseInput.X);

 


 

FMath::Round / Floor / Ceil (반올림, 내림, 올림)

static FORCEINLINE float RoundToFloat(float Value);  // 반올림
static FORCEINLINE float FloorToFloat(float Value);  // 내림
static FORCEINLINE float CeilToFloat(float Value);   // 올림

📝 예제

float Rounded = FMath::RoundToFloat(3.6f);  // 결과: 4.0
float Floored = FMath::FloorToFloat(3.6f);  // 결과: 3.0
float Ceiled = FMath::CeilToFloat(3.2f);    // 결과: 4.0

✅ 사용 사례:

  • UI 숫자 표시 시 정수로 변환
  • 이동 거리, 타이머 값 정리
  • 물리 연산 결과를 정수 값으로 변환

 


 

FMath::Fmod (나머지 연산, 소수점 포함)

`Fmod()` 함수는 소수점을 포함한 나눗셈의 나머지 값을 반환합니다.

static FORCEINLINE float Fmod(float X, float Y);
  • `X % Y` 연산과 비슷하지만, `float` 값을 지원

📝 예제

float ModValue = FMath::Fmod(7.5f, 2.0f);  // 결과: 1.5
float ModValue2 = FMath::Fmod(-10.0f, 3.0f); // 결과: -1.0

✅ 사용 사례:

  • 캐릭터 회전값을 0~360도 범위로 제
float ClampedRotation = FMath::Fmod(CurrentRotation, 360.0f);

📌기본 연산 마무리 정리

✅ Abs(): 절댓값 반환
✅ Clamp(): 값을 특정 범위 내로 제한
✅ Min()/Max(): 최소/최대값 반환
✅ Sign(): 값의 부호 반환 (+1, -1)
✅ Round()/Floor()/Ceil(): 반올림, 내림, 올림
✅ Fmod(): 소수점 포함 나머지 연산

 


 

랜덤 값 생성 (Random)

게임에서 난수를 생성할 때 사용됩니다.

int RandomInt = FMath::Rand();  // 0 ~ RAND_MAX 사이의 난수
float RandomFloat = FMath::FRand();  // 0.0 ~ 1.0 사이의 난수
int RandomRange = FMath::RandRange(1, 100); // 1~100 사이의 정수 난수
  • 랜덤 벡터 생성

특정 방향으로 랜덤한 벡터를 만들고 싶다면

FVector RandomVector = FMath::VRand(); // 랜덤 단위 벡터 반환

보간 (Lerp, Interp)

게임에서 부드러운 움직임을 만들 때 사용됩니다..

float LerpValue = FMath::Lerp(0.0f, 100.0f, 0.5f);  
// 0.5의 비율로 보간 → 결과: 50.0f
  • 선형 보간 (Lerp)

두 값 사이를 특정 비율로 보간합니다.

float NewValue = FMath::Lerp(0.0f, 100.0f, 0.75f);  
// 0에서 100 사이의 75% 위치 → 75.0
  • 보간 함수 (Interp)

프레임마다 값을 점진적으로 변화시킬 때 사용됩니다.

float SmoothValue = FMath::FInterpTo(Current, Target, DeltaTime, Speed);

보간에 대해서 더 자세한 내용은 접은글을 통해서 설명하겠습니다.

더보기


선형 보간 (Linear Interpolation, Lerp)

`Lerp` (Linear Interpolation)는 두 값 사이를 선형적으로 보간하는 함수입니다.
보간 비율(Alpha)이 0.0이면 시작 값, 1.0이면 종료 값이 반환됩니다.

static FORCEINLINE float Lerp(float A, float B, float Alpha);
static FORCEINLINE FVector Lerp(const FVector& A, const FVector& B, float Alpha);
static FORCEINLINE FQuat Lerp(const FQuat& A, const FQuat& B, float Alpha);

📝 예제

float Result = FMath::Lerp(0.0f, 100.0f, 0.5f);  
// 결과: 50.0 (0에서 100까지의 중간값)

✅ 사용 사례:

  • UI 애니메이션 (투명도, 크기 변경)
  • 캐릭터 스태미너 회복 속도 조절

📌 FMath::LerpStable() (더 정밀한 선형 보간)

✅ LerpStable() vs lerp() 차이점

  • `FMath::Lerp()` 는 일반적인 선형 보간(Linear Interpolation)을 수행.
  • 하지만 부동소수점 오차가 발생할 가능성이 있음.
  • `FMath::LerpStable()`은 더 정밀한 연산을 수행하여 작은 값에서도 정확한 결과를 보
static FORCEINLINE float LerpStable(float A, float B, float Alpha);
static FORCEINLINE FVector LerpStable(const FVector& A, const FVector& B, float Alpha);
  • `Lerp()`는 부동소수점 오차로 인해 결과 값이 정확하지 않을 수 있음.
  • `LerpStable()`은 매우 작은 값에도 더 정확한 보간 결과를 반환.

✅ 사용 사례:

  • 물리 연산에서 부동소수점 오차를 줄이기 위해 사용
  • 정밀한 애니메이션에서 부드러운 보간 유지

보간 속도를 조절하는 Interp 함수

`Interp` 함수들은 `Lerp`와 다르게 일정한 속도로 목표값에 도달하도록 보간합니다.
즉, 프레임별로 적용해야 하며 DeltaTime을 인자로 받습니다.

 

📌 FInterpTo (부드러운 값 보간)

  • `FInterpTo()`는 현재 값이 일정 속도로 목표 값으로 이동하도록 보간합니다.
  • `DeltaTime`을 입력하여 프레임 속도와 무관하게 일정한 속도를 유지할 수 있습니다.
static FORCEINLINE float FInterpTo(float Current, float Target, float DeltaTime, float Speed);

📝 예제

float NewValue = FMath::FInterpTo(CurrentValue, TargetValue, DeltaTime, 5.0f);

✅ 사용 사례:

  • UI의 게이지 채우기 (부드럽게 증가)
  • 플레이어 속도 변화 (점진적 가속/감속)

📌 VInterpTo (위치 보간)

  • `VInterpTo()`는 FVector 값을 부드럽게 보간하는 함수입니다.
static FORCEINLINE FVector VInterpTo(const FVector& Current, const FVector& Target, float DeltaTime, float Speed);

📝 예제

FVector NewLocation = FMath::VInterpTo(CurrentLocation, TargetLocation, DeltaTime, 3.0f);

✅ 사용 사례:

  • 카메라 위치 부드러운 이동
  • 플레이어가 목표 지점으로 자연스럽게 움직이도록 설정

📌 RInterpTo (회전 보간)

  • `RInterpTo()`는 FRotator를 부드럽게 보간하는 함수입니다.
  • `DeltaTime`을 이용하여 자연스럽게 회전할 수 있도록 합니다.
static FORCEINLINE FRotator RInterpTo(const FRotator& Current, const FRotator& Target, float DeltaTime, float Speed);

📝 예제

FRotator NewRotation = FMath::RInterpTo(CurrentRotation, TargetRotation, DeltaTime, 2.0f);

✅ 사용 사례:

  • 플레이어가 목표 방향으로 부드럽게 회전
  • AI 캐릭터가 타겟을 바라보도록 회전

3. Ease In/Out 보간 (감속/가속 적용)

EaseIn(), EaseOut(), EaseInOut() 보간은 속도가 일정하지 않게 변화하는 보간 방식입니다.

`Lerp()`는 선형적으로 이동하지만 `Ease` 보간은 시작과 끝의 속도를 다르게 설정하여 자연스러운 움직임을 만듭니다.

📌 Ease In

  • 시작할 때 천천히 증가하다가 점점 빨라짐.
  • 자동차가 출발할 때 처음에는 천천히 움직이다가 점점 빨라지는 것과 비슷함
  • Alpha 값이 증가할수록 변화율이 가속
float EaseInValue = FMath::Pow(Alpha, 2.0f); // Alpha 값이 클수록 속도 증가

✅ 사용 사례:

  • UI 버튼이 천천히 커지다가 점점 빠르게 확대될 때
  • 캐릭터 점프할 때 처음에는 천천히 상승, 이후 가속

📌 Ease Out

  • 처음에는 빠르게 증가하지만 마지막에는 속도가 느려짐.
  • 자동차가 멈출 때 처음에는 빠르게 감속하다가 점점 천천히 정지하는 것과 유사.
  • Alpha 값이 증가할수록 변화율이 감속됨
float EaseOutValue = 1.0f - FMath::Pow(1.0f - Alpha, 2.0f);

✅ 사용 사례:

  • UI 버튼이 빠르게 나타나다가 천천히 사라질 때
  • 자동차가 천천히 멈추는 애니메이션

📌 Ease In-Out

  • 처음과 끝에서 느리게, 중간에서는 빠르게., 마지막에는 다시 천천히 움직이는 보간
  • 가장 자연스러운 보간 방식으로 UI, 애니메이션에서 많이 사용됨.
  • 애니메이션이나 이동에서 부드러운 시작과 끝을 제공
float EaseInOutValue = Alpha < 0.5f ? 
    (2.0f * Alpha * Alpha) : 
    (1.0f - FMath::Pow(-2.0f * Alpha + 2.0f, 2.0f) * 0.5f);

✅ 사용 사례:

  • UI 버튼이 자연스럽게 등장/사라지는 효과
  • 캐릭터 점프 애니메이션에서 점진적인 가속 & 감속 효과 적용

4. Hermite 보간 (Cubic 보간)

Hermite 보간은 보다 부드러운 곡선을 생성하는 방식입니다.

static float CubicInterp(float P0, float T0, float P1, float T1, float Alpha);
  • P0, P1: 시작점과 끝점
  • T0, T1: 각 지점의 탄젠트(변화율)
  • Alpha: 0~1 보간 비율

📝 예제

float Result = FMath::CubicInterp(0.0f, 1.0f, 100.0f, 1.0f, 0.5f);​

✅ 사용 사례:

  • 카메라 움직임을 더욱 자연스럽게 할 때
  • UI 애니메이션에서 부드러운 효과를 줄 때

5. Sinusoidal 보간 (Sine 곡선 기반 보간)

`Sin()` 함수를 활용하여 부드러운 왕복 모션을 만들 수 있습니다.

📝 예제

float SinInterp = (FMath::Sin(ElapsedTime * Speed) + 1.0f) * 0.5f;​

✅ 사용 사례:

  • 오브젝트를 부드럽게 흔들리게 만들 때
  • 부유하는 애니메이션 효과 (Hovering Effect)

📌 정리

보간 함수설명주요 사용 사례

Lerp 선형 보간 UI 애니메이션, 스크롤 효과
FInterpTo 일정 속도로 값 보간 체력 회복, 부드러운 값 변화
VInterpTo 위치 보간 부드러운 이동 (카메라, 캐릭터)
RInterpTo 회전 보간 AI 캐릭터가 목표 바라보기
Ease In/Out 감속/가속 보간 버튼 애니메이션, 가속도 적용
CubicInterp 곡선 보간 카메라 애니메이션, 부드러운 UI
Sinusoidal Sine 곡선 기반 보간 부드러운 왕복 모션, UI 효과

📌보간 함수 선택 가이드

  • 값을 일정하게 보간 → FInterpTo
  • 위치를 부드럽게 이동 → VInterpTo
  • 회전을 자연스럽게 변화 → RInterpTo
  • 단순한 보간이 필요 → Lerp
  • 가속/감속이 필요 → EaseInOut
  • 곡선 보간이 필요 → CubicInterp

삼각 함수 (Trigonometry)

각도 변환과 삼각함수를 사용할 수 있습니다.

float Radians = FMath::DegreesToRadians(180.0f);  // 180도 → 라디안 변환
float Degrees = FMath::RadiansToDegrees(3.141592f); // PI 라디안 → 도 변환
float SinValue = FMath::Sin(FMath::DegreesToRadians(30.0f)); // sin(30도)

✅ 주요 삼각 함수

함수설명예제

DegreesToRadians() 도(Degree) 값을 라디안(Radian)으로 변환 float Radians = FMath::DegreesToRadians(180.0f);
RadiansToDegrees() 라디안(Radian) 값을 도(Degree)로 변환 float Degrees = FMath::RadiansToDegrees(3.141592f);
Sin() 사인(Sin) 값 반환 float SinValue = FMath::Sin(FMath::DegreesToRadians(30.0f));
Cos() 코사인(Cos) 값 반환 float CosValue = FMath::Cos(FMath::DegreesToRadians(60.0f));
Tan() 탄젠트(Tan) 값 반환 float TanValue = FMath::Tan(FMath::DegreesToRadians(45.0f));
ASin() 역사인(Arcsin) 값 반환 float Angle = FMath::RadiansToDegrees(FMath::ASin(0.5f));
ACos() 역코사인(Arccos) 값 반환 float Angle = FMath::RadiansToDegrees(FMath::ACos(0.5f));
ATan() 역탄젠트(Arctan) 값 반환 float Angle = FMath::RadiansToDegrees(FMath::ATan(1.0f));
ATan2() X, Y 좌표를 기반으로 각도 반환 float Angle = FMath::RadiansToDegrees(FMath::ATan2(Y, X));

각도 변환 (도 ↔ 라디안)

  • 게임 내에서 회전 값을 계산할 때 각도 변환이 필수적입니다.
  • 언리얼 엔진의 회전값(FRotator)은 기본적으로 도(Degree) 단위이므로, FMath::DegreesToRadians()와 FMath::RadiansToDegrees()를 활용해야 합니다.
float Radians = FMath::DegreesToRadians(180.0f);  // 180도 → 라디안 변환
float Degrees = FMath::RadiansToDegrees(3.141592f); // PI 라디안 → 도 변환

✅ 사용 사례:

  • 캐릭터 회전값을 FRotator에서 FQuat로 변환할 때
  • FVector의 방향을 삼각 함수를 사용해 계산할 때
  •  

FMath::Sin() - 사인(Sine) 함수

  • `FMath::Sin()` 함수는 각도의 사인(Sine) 값을 반환합니다.
  • 삼각형의 높이(세로 길이) 를 계산할 때 유용하게 사용됩니다.
  • 값의 범위는 -1 ~ 1 사이입니다.
  • 사인은 각도가 증가할수록 주기적으로 변하며(파형 형태), 반복적인 움직임을 구현하는데 유용합니다.
static FORCEINLINE float Sin(float RadAngle);
  • `RadAngle`: 라디안(Radian) 단위의 각도를 입력받음.
  • 반환값: 입력된 각도의 사인 값을 반환 (범위: -1 ~1)
  • 입력값이 도(Degree) 단위라면 `FMath::DegreesToRadians()`로 변환해야 함.

📝 예제

float Radians = FMath::DegreesToRadians(30.0f);
float SinValue = FMath::Sin(Radians);  // 결과: 0.5
  • 30도(°)의 사인 값은 0.5 → 즉, 해당 각도에서의 높이 비율을 의미함.

✅ 사용 사례:

`Sin()`을 사용하면 부드럽게 반복되는 움직임(진동, 파동, 회전 등) 을 쉽게 구현할 수 있음. ( 원형 궤도로 움직이는 오브젝트 )

float Time = GetWorld()->GetTimeSeconds();
float X = FMath::Sin(Time) * 100.0f;  // X 좌표를 사인 값으로 반복 이동
Actor->SetActorLocation(FVector(X, 0.0f, 0.0f));

👉 결과: 오브젝트가 좌우로 자연스럽게 흔들리는 효과 발생! 🎵 🔄

사인 값을 사용하면 캐릭터가 부드럽게 위/아래로 움직이도록 만들 수 있음. ( 오브젝트의 점프 애니메이션 구현 )

float JumpOffset = FMath::Sin(ElapsedTime * Speed) * JumpHeight;
Actor->SetActorLocation(BaseLocation + FVector(0.0f, 0.0f, JumpOffset));

👉 결과: 점프할 때 위로 올라가다가 다시 내려오는 자연스러운 애니메이션 구현 가능! 🎮


FMath::Cos() - 코사인(Cosine) 함수

  • `FMath::Cos()` 함수는 각도의 코사인(Cosine) 값을 반환합니다.
  • 삼각형의 밑변(가로 길이) 를 계산할 때 유용합니다.
  • 값의 범위는 -1 ~ 1 사이입니다.
  • `Cos()`는 `Sin()`과 90도(π/2) 차이가 있음. 즉, `Cos(x) = Sin(x + 90°)`
static FORCEINLINE float Cos(float RadAngle);
  • `RadAngle`: 라디안(Radian) 단위의 각도 입력
  • 반환값: 입력된 각도의 코사인 값 반환 (범위: -1 ~ 1)

📝 예제

float Radians = FMath::DegreesToRadians(60.0f);
float CosValue = FMath::Cos(Radians);  // 결과: 0.5
  • 60도(°)의 코사인 값은 0.5 → 즉, 해당 각도에서의 밑변 비율을 의미함.

✅ 사용 사례

  • `Sin()`과 `Cos()`을 조합하면 원형 궤도로 이동하는 움직임을 쉽게 만들 수 있음. ( 원형 궤도로 움직이는 오브젝 )
float Time = GetWorld()->GetTimeSeconds();
float X = FMath::Cos(Time) * 100.0f;  // 원의 반지름 = 100
float Y = FMath::Sin(Time) * 100.0f;
Actor->SetActorLocation(FVector(X, Y, 0.0f));

👉 결과: 오브젝트가 원형 궤도를 따라 빙글빙글 회전! 🔄

  • `Cos()`는 회전 벡터를 만들 때 자주 사용됨. ( 원형 궤도로 움직이는 캐릭터 )
float RotationAngle = 45.0f;  // 45도 회전
float Rad = FMath::DegreesToRadians(RotationAngle);
FVector Direction = FVector(FMath::Cos(Rad), FMath::Sin(Rad), 0.0f);

👉 결과: 45도 방향의 이동 벡터를 계산할 수 있음!


FMath::Tan() - 탄젠트(Tangent) 함수

  • `FMath::Tan()` 함수는 각도의 탄젠트(Tangent) 값을 반환합니다.
  • `Tan(θ) = Sin(θ) / Cos(θ)` 로 정의됩니다.
  • 탄젠트는 각도에 따른 기울기(Slope) 값을 계산할 때 유용합니다.
  • 값의 범위는 -∞ ~ ∞ (90도에서 기울기가 무한대가 됨)
static FORCEINLINE float Tan(float RadAngle);
  • `RadAngle`: 라디안(Radian) 단위의 각도 입력
  • 반환값: 입력된 각도의 탄젠트 값 반환

📝 예제

float Radians = FMath::DegreesToRadians(45.0f);
float TanValue = FMath::Tan(Radians);  // 결과: 1.0
  • 45도(°)의 탄젠트 값은 1.0 → 즉, 기울기가 1인 선(45도 방향 직선)의 기울기를 의미함.

✅ 사용 사례

  • 언덕이나 경사로에서 기울기(Slope)를 계산할 때 유용합니다. ( 경사면(Slope) 계산 )
float Slope = FMath::Tan(FMath::DegreesToRadians(30.0f));  
// 30도 경사면의 기울기 계산

👉 결과: 30도 경사의 기울기를 쉽게 계산 가능!

  • 탄젠트를 이용해 총알이 발사될 각도에 따라 수평 이동량을 조절할 수 있음. ( FPS 게임에서 총알의 궤적 계산 )
float BulletAngle = 30.0f;
float TravelDistance = 500.0f;
float HeightOffset = FMath::Tan(FMath::DegreesToRadians(BulletAngle)) * TravelDistance;

👉 결과: 총알이 30도 방향으로 500cm 날아갔을 때, 높이 변화량을 계산할 수 있음. 🎯


FMath::ASin(), ACos(), ATan(), ATan2() - 역삼각 함수 (Inverse Trigonometry)

역삼각 함수는 특정 값에서 해당하는 각도를 구할 때 사용됩니다.
즉, Sin(θ), Cos(θ), Tan(θ)의 역함수로 각도 값을 반환합니다.

 

📌 주요 역삼각 함수

함수설명예제

ASin() 역사인(Arcsin) 값 반환 float Angle = FMath::RadiansToDegrees(FMath::ASin(0.5f));
ACos() 역코사인(Arccos) 값 반환 float Angle = FMath::RadiansToDegrees(FMath::ACos(0.5f));
ATan() 역탄젠트(Arctan) 값 반환 float Angle = FMath::RadiansToDegrees(FMath::ATan(1.0f));
ATan2() X, Y 좌표를 기반으로 각도 반환 float Angle = FMath::RadiansToDegrees(FMath::ATan2(Y, X));

📝 예제 코드 (ATan2 활용)

float Y = 10.0f;
float X = 10.0f;
float AngleRadians = FMath::ATan2(Y, X);  
float AngleDegrees = FMath::RadiansToDegrees(AngleRadians);  // 결과: 45도

✅ 사용 사례:

2D 게임에서 캐릭터가 마우스 방향을 바라보도록 회전
AI가 목표를 추적할 때 회전 방향 계산


📌 삼각 함수 최종 정리

함수설명주요 사용 사례

Sin() 세로 길이(높이) 계산 점프 애니메이션, 진동 효과, 흔들림
Cos() 가로 길이(밑변) 계산 원형 궤도 이동, 회전 효과, 오브젝트 배치
Tan() 기울기(Slope) 계산 경사면 이동, 총알 궤적 계산, 사격 시스템
ASin() 역사인(각도 반환) 특정 높이에서 각도 계산
ACos() 역코사인(각도 반환) 특정 거리에서 각도 계산
ATan() 역탄젠트(각도 반환) 기울기 기반 각도 변환
ATan2() X, Y 좌표를 기반으로 각도 반환 2D/3D 회전, 목표 추적

 

'Unreal > Unreal For C++' 카테고리의 다른 글

SERIALIZATION (직렬화)  (0) 2025.01.31
DELEGATE  (0) 2025.01.17
'Unreal/Unreal For C++' 카테고리의 다른 글
  • SERIALIZATION (직렬화)
  • DELEGATE
Mr.Vulpes
Mr.Vulpes
여우비가 내리는 시간입니다.
  • Mr.Vulpes
    여우비 개발실
    Mr.Vulpes
  • 전체
    오늘
    어제
    • Browse All Categories (43) N
      • Unreal (10)
        • Core Concepts (7)
        • Unreal For C++ (3)
      • C++ Programming (3)
        • C Basic (3)
      • DirectX (5) N
        • Basic (3) N
        • DirectX - Class (2) N
      • Math & Physics (3)
        • Vectors (3)
      • Software Engineering (22)
        • Software Development Princi.. (19)
        • Design Pattern (3)
  • hELLO· Designed By정상우.v4.10.3
Mr.Vulpes
FMath
상단으로

티스토리툴바