이리저리 기울어지며 경사에 따라 플레이어가 아래로 밀려나는(미끄러지는) 발판 구현해보기.
(캐릭터가 미끄러지는 발판 위에서 방향을 컨트롤하면서 버티는 방식)
#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 :
이 값을 조정하여 미끄러지는 와중에도
플레이어가 반대 방향으로 힘을 주어 버틸 수 있는 정도를 결정할 수 있음
'Unreal 본격 TIL' 카테고리의 다른 글
| CH4 Unreal ) 팀 프로젝트 PlantyRace 회고 (0) | 2026.04.24 |
|---|---|
| Unreal 팀프로젝트 레벨파트 핵심 시스템 (0) | 2026.04.22 |
| Unreal 스태틱메시 에셋 직접 수정해서 써보기 (0) | 2026.04.16 |
| Unreal 움직이는 액터(장애물) 만들기 (1) | 2026.04.14 |
| Unreal 3D에셋 위치가 불규칙 할 때, 피벗 편집(Edit Pivot) (0) | 2026.04.07 |