PART 4 · 강의 1/3

Chaos Vehicle 아키텍처

ChaosWheeledVehicleMovementComponent와 차량 물리 시스템 구조

01

Chaos Vehicle 시스템 개요

PhysX Vehicle에서 Chaos Vehicle로

UE5의 차량 물리는 Chaos Vehicle 시스템을 사용합니다. 이전 PhysX Vehicle을 완전히 대체하며, ChaosVehiclesPlugin을 통해 제공됩니다.

플러그인 활성화 필수

Edit > Plugins > Physics에서 Chaos Vehicles 플러그인이 활성화되어 있는지 확인하세요. UE5에서는 기본적으로 활성화되어 있지만, 프로젝트 설정에 따라 비활성화되어 있을 수 있습니다.

핵심 클래스 구조
  • AWheeledVehiclePawn — 차량 폰의 기본 클래스. Skeletal Mesh + Vehicle Movement Component를 포함합니다.
  • UChaosWheeledVehicleMovementComponent — 차량 물리 시뮬레이션의 핵심. 엔진, 변속기, 서스펜션, 타이어를 관리합니다.
  • UChaosVehicleWheel — 개별 휠의 물리 속성(반경, 마찰, 서스펜션 등)을 정의합니다.
  • FVehicleEngineConfig — 엔진 토크 커브, 최대 RPM 등 엔진 설정.
  • FVehicleTransmissionConfig — 기어비, 변속 로직 설정.
02

Vehicle Pawn 기본 구성

C++에서 차량 폰 만들기

C++ - Vehicle Pawn 헤더
#include "WheeledVehiclePawn.h" #include "ChaosWheeledVehicleMovementComponent.h" UCLASS() class AMyCar : public AWheeledVehiclePawn { GENERATED_BODY() public: AMyCar(); UPROPERTY(VisibleAnywhere) USpringArmComponent* SpringArm; UPROPERTY(VisibleAnywhere) UCameraComponent* Camera; virtual void SetupPlayerInputComponent(UInputComponent* InputComponent) override; private: void ApplyThrottle(float Value); void ApplySteering(float Value); void ApplyBrake(float Value); void ApplyHandbrake(bool bPressed); };
C++ - Vehicle Pawn 구현
AMyCar::AMyCar() { // Vehicle Movement Component 접근 UChaosWheeledVehicleMovementComponent* VehicleMovement = CastChecked<UChaosWheeledVehicleMovementComponent>(GetVehicleMovement()); // 엔진 설정 VehicleMovement->EngineSetup.MaxTorque = 500.0f; VehicleMovement->EngineSetup.MaxRPM = 7000.0f; VehicleMovement->EngineSetup.EngineIdleRPM = 1200.0f; // 변속기 설정 VehicleMovement->TransmissionSetup.bUseAutomaticGears = true; VehicleMovement->TransmissionSetup.FinalRatio = 3.08f; // 질량 설정 VehicleMovement->Mass = 1500.0f; // kg VehicleMovement->InertiaTensorScale = FVector(1, 1, 1); // 카메라 설정 SpringArm = CreateDefaultSubobject<USpringArmComponent>("SpringArm"); SpringArm->SetupAttachment(RootComponent); SpringArm->TargetArmLength = 600.0f; SpringArm->bUsePawnControlRotation = true; Camera = CreateDefaultSubobject<UCameraComponent>("Camera"); Camera->SetupAttachment(SpringArm); } void AMyCar::ApplyThrottle(float Value) { GetVehicleMovementComponent()->SetThrottleInput(Value); } void AMyCar::ApplySteering(float Value) { GetVehicleMovementComponent()->SetSteeringInput(Value); } void AMyCar::ApplyHandbrake(bool bPressed) { GetVehicleMovementComponent()->SetHandbrakeInput(bPressed); }
03

Skeletal Mesh 요구사항

차량 메시 본 구조와 Physics Asset

필수 본 구조
  • Vehicle Root — 차체 본. 모든 휠 본의 부모.
  • Wheel_FL / Wheel_FR — 전방 좌/우 휠 본 (조향+구동).
  • Wheel_RL / Wheel_RR — 후방 좌/우 휠 본 (구동만).
설정 항목 설명 주의사항
Physics Asset차체용 단순 콜리전 바디휠 본에는 바디 불필요 (Chaos가 관리)
본 위치휠 본은 실제 접지점 위치에서스펜션 오프셋은 코드에서 설정
본 방향X-Forward, Z-Up 기준Import 시 축 확인 필수
콜리전차체는 간단한 Convex Hull복잡한 콜리전은 성능 저하 유발
Vehicle Template 활용

UE5의 Vehicle Template 프로젝트에서 올바른 본 구조와 기본 설정이 포함된 차량을 확인할 수 있습니다. 새 프로젝트를 시작할 때 이 템플릿을 참고하는 것이 가장 빠른 방법입니다.

04

입력 시스템과 Enhanced Input

Enhanced Input System으로 차량 제어하기

C++ - Enhanced Input 바인딩
void AMyCar::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent) { Super::SetupPlayerInputComponent(PlayerInputComponent); if (UEnhancedInputComponent* EIC = Cast<UEnhancedInputComponent>(PlayerInputComponent)) { // Throttle (W/S 또는 트리거) EIC->BindAction(ThrottleAction, ETriggerEvent::Triggered, this, &AMyCar::HandleThrottle); EIC->BindAction(ThrottleAction, ETriggerEvent::Completed, this, &AMyCar::HandleThrottleRelease); // Steering (A/D 또는 스틱) EIC->BindAction(SteerAction, ETriggerEvent::Triggered, this, &AMyCar::HandleSteering); EIC->BindAction(SteerAction, ETriggerEvent::Completed, this, &AMyCar::HandleSteeringRelease); // Handbrake (Space) EIC->BindAction(HandbrakeAction, ETriggerEvent::Started, this, &AMyCar::HandleHandbrakePressed); EIC->BindAction(HandbrakeAction, ETriggerEvent::Completed, this, &AMyCar::HandleHandbrakeReleased); } } void AMyCar::HandleThrottle(const FInputActionValue& Value) { float ThrottleValue = Value.Get<float>(); GetVehicleMovementComponent()->SetThrottleInput(ThrottleValue); }
SUMMARY

핵심 요약

  • UE5 차량 물리는 Chaos Vehicle 시스템 기반이며, ChaosVehiclesPlugin이 필요합니다.
  • AWheeledVehiclePawnUChaosWheeledVehicleMovementComponent가 차량 물리를 관리합니다.
  • Skeletal Mesh에 차체 본 + 4개 휠 본이 필요하며, Physics Asset은 차체만 설정합니다.
  • SetThrottleInput, SetSteeringInput, SetHandbrakeInput으로 차량을 제어합니다.
  • Enhanced Input System과의 연동으로 키보드/게임패드/스티어링 휠 지원이 가능합니다.
PRACTICE

도전 과제

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

실습 1: 기본 차량 블루프린트 생성

ChaosWheeledVehicleMovementComponent를 사용하여 4륜 차량 블루프린트를 생성하세요. Skeletal Mesh에 휠 본을 설정하고, 기본 스로틀/브레이크/스티어링 입력을 매핑하여 주행 가능한 차량을 만드세요.

실습 2: Vehicle Movement 파라미터 튜닝

Engine Torque Curve를 직접 편집하여 차량의 가속 특성을 변경하세요. 최대 RPM, 기어비, 변속 지점을 조정하며 스포츠카와 트럭의 주행 특성 차이를 구현하세요.

심화 과제: 차량 텔레메트리 HUD

C++로 실시간 차량 텔레메트리 HUD를 제작하세요. RPM, 속도, 기어 단수, 각 휠의 슬립 비율, 서스펜션 압축량을 시각적으로 표시하고, 타이어 접지력 벡터를 3D로 그리세요.