PART 4 · 강의 3/3

고급 차량 물리

엔진 커브, 변속기, 차동장치, 안티롤바, 에어로다이나믹스

01

엔진 토크 커브

RPM에 따른 토크 출력 제어

C++ - 엔진 설정
void AMyCar::SetupEngine() { UChaosWheeledVehicleMovementComponent* VM = CastChecked<UChaosWheeledVehicleMovementComponent>(GetVehicleMovement()); // 엔진 기본 설정 VM->EngineSetup.MaxTorque = 500.0f; // 최대 토크 (N*m) VM->EngineSetup.MaxRPM = 7000.0f; // 레드라인 RPM VM->EngineSetup.EngineIdleRPM = 1200.0f; // 공회전 RPM VM->EngineSetup.EngineBrakeEffect = 0.2f; // 엔진 브레이크 효과 // 토크 커브 설정 (RPM비율 vs 토크비율) // RPM비율: 0.0 = 공회전, 1.0 = 레드라인 // 토크비율: MaxTorque에 대한 배율 VM->EngineSetup.TorqueCurve.GetRichCurve()->Reset(); VM->EngineSetup.TorqueCurve.GetRichCurve()->AddKey(0.0f, 0.4f); // 낮은 RPM: 40% VM->EngineSetup.TorqueCurve.GetRichCurve()->AddKey(0.3f, 0.8f); // 중간: 80% VM->EngineSetup.TorqueCurve.GetRichCurve()->AddKey(0.5f, 1.0f); // 피크: 100% VM->EngineSetup.TorqueCurve.GetRichCurve()->AddKey(0.8f, 0.9f); // 고RPM: 90% VM->EngineSetup.TorqueCurve.GetRichCurve()->AddKey(1.0f, 0.7f); // 레드라인: 70% }
차량 유형별 토크 커브 특성

스포츠카: 높은 RPM에서 피크, 넓은 파워 밴드. 트럭/SUV: 낮은 RPM에서 피크, 높은 초기 토크. 전기차: 0 RPM에서 최대 토크, RPM 증가에 따라 감소. 토크 커브를 편집해 원하는 차량 특성을 만들 수 있습니다.

02

변속기 설정

기어비, 자동/수동 변속 로직

C++ - 변속기 설정
void AMyCar::SetupTransmission() { UChaosWheeledVehicleMovementComponent* VM = CastChecked<UChaosWheeledVehicleMovementComponent>(GetVehicleMovement()); // 변속기 기본 설정 VM->TransmissionSetup.bUseAutomaticGears = true; VM->TransmissionSetup.bUseAutoReverse = true; VM->TransmissionSetup.FinalRatio = 3.08f; VM->TransmissionSetup.ChangeUpRPM = 6000.0f; VM->TransmissionSetup.ChangeDownRPM = 2500.0f; VM->TransmissionSetup.GearChangeTime = 0.3f; // 변속 시간 (초) VM->TransmissionSetup.TransmissionEfficiency = 0.9f; // 기어비 설정 VM->TransmissionSetup.ForwardGearRatios = { 3.38f, // 1단 2.02f, // 2단 1.35f, // 3단 1.00f, // 4단 0.74f, // 5단 0.50f // 6단 }; VM->TransmissionSetup.ReverseGearRatios = {3.30f}; }
설정설명효과
FinalRatio최종 감속비전체 기어 출력에 곱해지는 비율
ChangeUpRPM업시프트 RPM이 RPM 이상이면 자동 변속
ChangeDownRPM다운시프트 RPM이 RPM 이하이면 자동 변속
GearChangeTime변속 소요 시간클수록 변속 시 토크 단절 길어짐
TransmissionEfficiency전달 효율1.0 = 100% 효율 (비현실적)
03

차동장치와 안티롤바

구동력 분배와 롤 안정성

C++ - 차동장치와 안티롤바
void AMyCar::SetupDifferentialAndStability() { UChaosWheeledVehicleMovementComponent* VM = CastChecked<UChaosWheeledVehicleMovementComponent>(GetVehicleMovement()); // 차동장치 설정 VM->DifferentialSetup.DifferentialType = EVehicleDifferential::RearWheelDrive; // RWD // 옵션: AllWheelDrive, FrontWheelDrive, RearWheelDrive VM->DifferentialSetup.FrontRearSplit = 0.5f; // AWD시 전후 분배 (0.5 = 50:50) // 안티롤바 (Stabilizer Bar) // 코너링 시 롤(기울어짐)을 줄여 안정성 향상 VM->SteeringSetup.SteeringType = ESteeringType::Ackermann; // 공기 저항 (에어로다이나믹스) VM->DragCoefficient = 0.3f; // 항력 계수 VM->DownforceCoefficient = 0.1f; // 다운포스 계수 // 무게중심 (핸들링에 큰 영향) VM->CenterOfMassOverride = FVector(0, 0, -20.0f); VM->bEnableCenterOfMassOverride = true; }
구동 방식특성적합한 차량
FWD (전륜구동)언더스티어 경향, 안정적일반 세단, 해치백
RWD (후륜구동)오버스티어 경향, 드리프트 가능스포츠카, 레이싱카
AWD (사륜구동)높은 그립, 안정적SUV, 랠리카
무게중심(COM)의 중요성

무게중심의 Z 위치를 낮출수록 롤이 줄어 안정적이고, 전/후 위치에 따라 언더/오버스티어 특성이 달라집니다. COM이 앞쪽이면 언더스티어, 뒤쪽이면 오버스티어 경향입니다.

04

런타임 텔레메트리

차량 상태 모니터링과 UI 연동

C++ - 차량 상태 정보 접근
void AMyCar::Tick(float DeltaTime) { Super::Tick(DeltaTime); UChaosWheeledVehicleMovementComponent* VM = CastChecked<UChaosWheeledVehicleMovementComponent>(GetVehicleMovement()); // 속도 (km/h) float SpeedKmh = VM->GetForwardSpeedMPH() * 1.60934f; // 현재 RPM float CurrentRPM = VM->GetEngineRotationSpeed(); // 현재 기어 int32 CurrentGear = VM->GetCurrentGear(); // 개별 휠 상태 for (int32 i = 0; i < 4; ++i) { float WheelRPM = VM->Wheels[i]->GetWheelRPM(); bool bInContact = VM->Wheels[i]->bInContact; float SlipAngle = VM->Wheels[i]->GetSlipAngle(); float SuspensionOffset = VM->Wheels[i]->GetSuspensionOffset(); } }
SUMMARY

핵심 요약

  • 토크 커브로 RPM에 따른 엔진 출력 특성을 정밀하게 제어합니다.
  • 변속기 설정으로 기어비, 변속 타이밍, 전달 효율을 조절합니다.
  • 차동장치(FWD/RWD/AWD)와 무게중심이 핸들링 특성을 결정합니다.
  • 에어로다이나믹스(Drag, Downforce)로 고속 주행 안정성을 제어합니다.
  • 런타임 텔레메트리로 속도, RPM, 기어, 슬립 등 차량 상태를 모니터링하고 UI에 연결합니다.
PRACTICE

도전 과제

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

실습 1: 차량 에어 컨트롤

차량이 공중에 있을 때(모든 휠이 비접지) 에어 컨트롤을 적용하는 블루프린트를 구현하세요. 공중에서 Torque를 가해 차체를 회전시키고, 착지 시 안정적으로 복구되는 로직을 만드세요.

실습 2: 드리프트 메카닉 구현

핸드브레이크 입력 시 후륜의 마찰을 감소시켜 드리프트가 발생하는 시스템을 만드세요. 드리프트 각도에 따라 타이어 연기 파티클과 스키드 마크 데칼을 생성하세요.

심화 과제: 네트워크 차량 동기화

멀티플레이어 환경에서 Chaos Vehicle의 물리 상태를 네트워크로 동기화하는 시스템을 구현하세요. 서버 권한 물리 + 클라이언트 예측 + 보정 패턴을 적용하세요.