Wheel & Suspension 설정
UChaosVehicleWheel과 서스펜션 파라미터 상세 튜닝
Wheel 클래스 설정
UChaosVehicleWheel의 핵심 파라미터
// 전륜 휠 클래스
UCLASS()
class UMyCarWheelFront : public UChaosVehicleWheel
{
GENERATED_BODY()
public:
UMyCarWheelFront()
{
AxleType = EAxleType::Front;
WheelRadius = 38.0f; // cm
WheelWidth = 28.0f; // cm
bAffectedByHandbrake = false; // 전륜은 핸드브레이크 미적용
bAffectedByEngine = true; // 전륜구동(FWD) 시 true
bAffectedBySteering = true; // 조향 가능
MaxSteerAngle = 40.0f; // 최대 조향각 (도)
// 타이어 마찰
FrictionForceMultiplier = 3.0f;
SideSlipModifier = 1.0f;
SlipThreshold = 20.0f;
SkidThreshold = 20.0f;
}
};
// 후륜 휠 클래스
UCLASS()
class UMyCarWheelRear : public UChaosVehicleWheel
{
GENERATED_BODY()
public:
UMyCarWheelRear()
{
AxleType = EAxleType::Rear;
WheelRadius = 38.0f;
WheelWidth = 28.0f;
bAffectedByHandbrake = true; // 후륜 핸드브레이크 적용
bAffectedByEngine = true; // 후륜구동(RWD) 시 true
bAffectedBySteering = false; // 조향 불가
MaxSteerAngle = 0.0f;
FrictionForceMultiplier = 3.0f;
SideSlipModifier = 1.0f;
}
};
| 파라미터 | 설명 | 일반 세단 | 스포츠카 | 트럭 |
|---|---|---|---|---|
WheelRadius | 휠 반경 (cm) | 35 | 33 | 50 |
WheelWidth | 휠 폭 (cm) | 25 | 30 | 28 |
MaxSteerAngle | 최대 조향각 (도) | 40 | 35 | 45 |
FrictionForceMultiplier | 마찰력 배율 | 3.0 | 4.0 | 2.5 |
MaxBrakeTorque | 최대 제동 토크 | 1500 | 3000 | 2000 |
서스펜션 설정
스프링, 댐퍼, 프리로드 튜닝
UMyCarWheelFront::UMyCarWheelFront()
{
// 서스펜션 기본 설정
SuspensionMaxRaise = 10.0f; // 최대 상승 거리 (cm)
SuspensionMaxDrop = 10.0f; // 최대 하강 거리 (cm)
SuspensionDampingRatio = 0.5f; // 감쇠비 (0~1, 1=임계감쇠)
SpringRate = 250.0f; // 스프링 강성 (N/cm)
SpringPreload = 50.0f; // 프리로드 (N)
// 서스펜션 축 (기본: 월드 Z축 = 수직)
SuspensionAxis = FVector(0, 0, -1);
SuspensionForceOffset = FVector(0, 0, 0);
}
| 서스펜션 파라미터 | 효과 | 높은 값 | 낮은 값 |
|---|---|---|---|
| SpringRate | 스프링 강성 | 단단한 승차감, 롤 감소 | 부드러운 승차감, 롤 증가 |
| SuspensionDampingRatio | 감쇠비 | 진동 빠르게 감소 | 출렁이는 느낌 |
| SpringPreload | 초기 압축력 | 차체 높이 증가 | 차체 높이 감소 |
| SuspensionMaxRaise | 서스펜션 상방 이동량 | 큰 범프 흡수 | 제한적 이동 |
| SuspensionMaxDrop | 서스펜션 하방 이동량 | 내리막에서 접지 | 빠르게 접지 상실 |
0.3~0.5: 부드러운 일반 차량. 0.5~0.7: 스포츠카. 0.7~1.0: 레이싱카. 1.0은 임계감쇠로 진동 없이 원래 위치로 복귀합니다. 1.0을 초과하면 과감쇠로 복귀가 느려집니다.
Wheel 설정 등록
Movement Component에 휠 연결하기
AMyCar::AMyCar()
{
UChaosWheeledVehicleMovementComponent* Vehicle =
CastChecked<UChaosWheeledVehicleMovementComponent>(GetVehicleMovement());
// 휠 설정 배열 초기화
Vehicle->WheelSetups.SetNum(4);
// 전방 좌측 (FL)
Vehicle->WheelSetups[0].WheelClass = UMyCarWheelFront::StaticClass();
Vehicle->WheelSetups[0].BoneName = FName("Wheel_FL");
Vehicle->WheelSetups[0].AdditionalOffset = FVector(0, 0, 0);
// 전방 우측 (FR)
Vehicle->WheelSetups[1].WheelClass = UMyCarWheelFront::StaticClass();
Vehicle->WheelSetups[1].BoneName = FName("Wheel_FR");
Vehicle->WheelSetups[1].AdditionalOffset = FVector(0, 0, 0);
// 후방 좌측 (RL)
Vehicle->WheelSetups[2].WheelClass = UMyCarWheelRear::StaticClass();
Vehicle->WheelSetups[2].BoneName = FName("Wheel_RL");
// 후방 우측 (RR)
Vehicle->WheelSetups[3].WheelClass = UMyCarWheelRear::StaticClass();
Vehicle->WheelSetups[3].BoneName = FName("Wheel_RR");
}
AdditionalOffset은 본 위치로부터의 추가 오프셋입니다. 메시의 휠 본 위치가 정확하지 않을 때 이 값으로 보정할 수 있습니다. 가능하면 메시에서 본 위치를 정확히 맞추는 것이 좋습니다.
타이어 마찰과 슬립
타이어 물리의 핵심 개념
타이어의 그립은 슬립(Slip)에 의해 결정됩니다. 슬립이 없으면 마찰력도 없고, 과도한 슬립은 그립을 잃게 합니다. 이 관계를 이해하는 것이 차량 튜닝의 핵심입니다.
| 파라미터 | 설명 | 효과 |
|---|---|---|
FrictionForceMultiplier | 전체 마찰력 배율 | 높을수록 그립 증가 |
SideSlipModifier | 횡방향 슬립 감도 | 높을수록 언더스티어 경향 |
SlipThreshold | 슬립 감지 임계값 | 타이어 스키드 시작 시점 |
CorneringStiffness | 코너링 강성 | 높을수록 날카로운 코너링 |
드리프트 게임을 만들려면: 후륜의 SideSlipModifier를 낮추고, FrictionForceMultiplier를 약간 낮추세요. 핸드브레이크 시 후륜 마찰을 급격히 줄이는 로직을 추가하면 자연스러운 드리프트 진입이 가능합니다.
핵심 요약
UChaosVehicleWheel을 상속하여 전륜/후륜별 휠 클래스를 정의합니다.- 서스펜션의 SpringRate, DampingRatio, Preload가 승차감과 핸들링을 결정합니다.
WheelSetups배열로 4개의 휠을 Movement Component에 등록하고, 본 이름으로 매핑합니다.- 타이어 슬립과 마찰의 관계를 이해하고 조절하는 것이 차량 물리 튜닝의 핵심입니다.
AxleType(Front/Rear)으로 조향, 구동, 핸드브레이크 적용 여부를 설정합니다.
도전 과제
배운 내용을 직접 실습해보세요
차량의 서스펜션 파라미터(Natural Frequency, Damping Ratio, MaxRaise, MaxDrop)를 조정하세요. 오프로드 차량과 레이싱 카의 서스펜션을 각각 구현하고 주행 특성을 비교하세요.
Lateral/Longitudinal Friction 커브를 직접 편집하여 드라이/웨트/오프로드 3가지 도로 조건에 맞는 타이어 특성을 만드세요. 각 조건에서 코너링과 브레이킹 성능 차이를 테스트하세요.
주행 속도와 노면 조건에 따라 서스펜션 파라미터가 실시간으로 변하는 Active Suspension 시스템을 C++로 구현하세요. 고속 주행 시 차고 변화를 적용하세요.