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 |