Unreal 본격 TIL

Unreal 경사에 따라 미끄러지는 발판 트랩

ggojun 2026. 4. 20. 20:26

이리저리 기울어지며 경사에 따라 플레이어가 아래로 밀려나는(미끄러지는) 발판 구현해보기. 
(캐릭터가 미끄러지는 발판 위에서 방향을 컨트롤하면서 버티는 방식) 

 

#pragma once

#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "PRSlidingPlatform.generated.h"

UCLASS()
class PLANTYRACE_API APRSlidingPlatform : public AActor
{
    GENERATED_BODY()
    
public:    
    APRSlidingPlatform();

protected:
    virtual void BeginPlay() override;

public:    
    virtual void Tick(float DeltaTime) override;

    // 발판 메쉬
    UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Components")
    UStaticMeshComponent* MeshComp;

    // 최대 기울기 각도
    UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Sliding")
    float MaxTiltAngle;

    // 기울기 속도
    UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Sliding")
    float TiltSpeed;

private:
    float ElapsedTime;
};

 

 

Tick 함수를 사용해 발판을 지속적으로 회전시키게,

캐릭터는 발판이 기울어짐에 따라 엔진 기본 물리 법칙에 의해 미끄러지게 

#include "PRSlidingPlatform.h"

APRSlidingPlatform::APRSlidingPlatform()
{
    PrimaryActorTick.bCanEverTick = true;

    MeshComp = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("MeshComp"));
    RootComponent = MeshComp;

    // 기본값 설정
    MaxTiltAngle = 35.0f;
    TiltSpeed = 1.5f;
    ElapsedTime = 0.0f;

    // 캐릭터가 미끄러지기 위해서는 표면 마찰력이 낮거나 경사가 커야 함 
    MeshComp->SetMobility(EComponentMobility::Movable);
}

void APRSlidingPlatform::BeginPlay()
{
    Super::BeginPlay();
}

void APRSlidingPlatform::Tick(float DeltaTime)
{
    Super::Tick(DeltaTime);

    ElapsedTime += DeltaTime * TiltSpeed;

    // Sine 함수를 사용해 좌우로 부드럽게 기울어지는 연산
    float CurrentPitch = FMath::Sin(ElapsedTime) * MaxTiltAngle;
    float CurrentRoll = FMath::Cos(ElapsedTime * 0.7f) * MaxTiltAngle; // 약간의 변화를 위해 0.7 곱함

    SetActorRotation(FRotator(CurrentPitch, 0.0f, CurrentRoll));
}

 

 

발판이 기울어져도 캐릭터가 미끄러지지 않을 수 있음. 

미끄러짐 구현을 위한 캐릭터 설정도 해주어야 함. 

>> 캐릭터 블루프린트 클래스 - CharacterMovement 컴포넌트 설정 << 


Walkable Floor Angle : 
발판의 각도가 Walkable Floor Angle의 값보다 더 기울어지면

캐릭터는 자동으로 미끄러짐 

Friction(마찰력) : 
Ground Friction 값을 낮출수록 미끄러지는 느낌이 강해짐 


Braking Deceleration Walking :

이 값을 조정하여 미끄러지는 와중에도

플레이어가 반대 방향으로 힘을 주어 버틸 수 있는 정도를 결정할 수 있음