1. Sin 함수와 Lerp 함수 활용한 구현
헤더 파일
#pragma once
#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "Star.generated.h"
UCLASS()
class CH3CPP_API AStar : public AActor
{
GENERATED_BODY()
public:
AStar();
protected:
virtual void BeginPlay() override;
virtual void Tick(float DeltaTime) override;
private:
FVector StartScale;
float RunningTime;
float ScaleSpeed = 1.0f;
float MinScale = 0.5f;
float MaxScale = 1.5f;
};
CPP 파일
#include "Star.h"
AStar::AStar()
{
PrimaryActorTick.bCanEverTick = true;
}
void AStar::BeginPlay()
{
Super::BeginPlay();
StartScale = GetActorScale3D();
}
void AStar::Tick(float DeltaTime)
{
Super::Tick(DeltaTime);
RunningTime += DeltaTime;
float ScaleFactor = (FMath::Sin(ScaleSpeed * RunningTime) + 1.0f) * 0.5f;
float CurrentScale = FMath::Lerp(MinScale, MaxScale, ScaleFactor);
FVector NewScale = StartScale * CurrentScale;
SetActorScale3D(NewScale);
}
RunningTime 증가: 매 프레임마다 DeltaTime을 더해 시간을 누적한다.
FMath::Sin() 계산: RunningTime에 ScaleSpeed를 곱해 사인 함수를 계산하고, 이를 (0~1) 범위로 변환한다.
FMath::Sin()의 결과는 -1~1 범위이므로, +1을 더하고 0.5를 곱해 0~1로 변환된다.
FMath::Lerp()로 보간: ScaleFactor를 사용해 MinScale과 MaxScale 사이에서 선형 보간된 현재 크기를 계산한다.
- 크기 설정:
StartScale에 보간된 값을 곱해 새로운 크기를 계산하고, SetActorScale3D() 함수로 적용한다.