PART 4 · 강의 2/3

Wheel & Suspension 설정

UChaosVehicleWheel과 서스펜션 파라미터 상세 튜닝

01

Wheel 클래스 설정

UChaosVehicleWheel의 핵심 파라미터

C++ - 전륜/후륜 Wheel 클래스
// 전륜 휠 클래스 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)353350
WheelWidth휠 폭 (cm)253028
MaxSteerAngle최대 조향각 (도)403545
FrictionForceMultiplier마찰력 배율3.04.02.5
MaxBrakeTorque최대 제동 토크150030002000
02

서스펜션 설정

스프링, 댐퍼, 프리로드 튜닝

C++ - 서스펜션 설정
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서스펜션 하방 이동량내리막에서 접지빠르게 접지 상실
감쇠비(Damping Ratio) 가이드

0.3~0.5: 부드러운 일반 차량. 0.5~0.7: 스포츠카. 0.7~1.0: 레이싱카. 1.0은 임계감쇠로 진동 없이 원래 위치로 복귀합니다. 1.0을 초과하면 과감쇠로 복귀가 느려집니다.

03

Wheel 설정 등록

Movement Component에 휠 연결하기

C++ - Vehicle Movement에 휠 등록
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 활용

AdditionalOffset은 본 위치로부터의 추가 오프셋입니다. 메시의 휠 본 위치가 정확하지 않을 때 이 값으로 보정할 수 있습니다. 가능하면 메시에서 본 위치를 정확히 맞추는 것이 좋습니다.

04

타이어 마찰과 슬립

타이어 물리의 핵심 개념

타이어의 그립은 슬립(Slip)에 의해 결정됩니다. 슬립이 없으면 마찰력도 없고, 과도한 슬립은 그립을 잃게 합니다. 이 관계를 이해하는 것이 차량 튜닝의 핵심입니다.

파라미터설명효과
FrictionForceMultiplier전체 마찰력 배율높을수록 그립 증가
SideSlipModifier횡방향 슬립 감도높을수록 언더스티어 경향
SlipThreshold슬립 감지 임계값타이어 스키드 시작 시점
CorneringStiffness코너링 강성높을수록 날카로운 코너링
드리프트 설정 팁

드리프트 게임을 만들려면: 후륜의 SideSlipModifier를 낮추고, FrictionForceMultiplier를 약간 낮추세요. 핸드브레이크 시 후륜 마찰을 급격히 줄이는 로직을 추가하면 자연스러운 드리프트 진입이 가능합니다.

SUMMARY

핵심 요약

  • UChaosVehicleWheel을 상속하여 전륜/후륜별 휠 클래스를 정의합니다.
  • 서스펜션의 SpringRate, DampingRatio, Preload가 승차감과 핸들링을 결정합니다.
  • WheelSetups 배열로 4개의 휠을 Movement Component에 등록하고, 본 이름으로 매핑합니다.
  • 타이어 슬립마찰의 관계를 이해하고 조절하는 것이 차량 물리 튜닝의 핵심입니다.
  • AxleType(Front/Rear)으로 조향, 구동, 핸드브레이크 적용 여부를 설정합니다.
PRACTICE

도전 과제

배운 내용을 직접 실습해보세요

실습 1: 서스펜션 튜닝

차량의 서스펜션 파라미터(Natural Frequency, Damping Ratio, MaxRaise, MaxDrop)를 조정하세요. 오프로드 차량과 레이싱 카의 서스펜션을 각각 구현하고 주행 특성을 비교하세요.

실습 2: 타이어 마찰 커브 설정

Lateral/Longitudinal Friction 커브를 직접 편집하여 드라이/웨트/오프로드 3가지 도로 조건에 맞는 타이어 특성을 만드세요. 각 조건에서 코너링과 브레이킹 성능 차이를 테스트하세요.

심화 과제: 동적 서스펜션 시스템

주행 속도와 노면 조건에 따라 서스펜션 파라미터가 실시간으로 변하는 Active Suspension 시스템을 C++로 구현하세요. 고속 주행 시 차고 변화를 적용하세요.