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의 물리 상태를 네트워크로 동기화하는 시스템을 구현하세요. 서버 권한 물리 + 클라이언트 예측 + 보정 패턴을 적용하세요.