Unity 차량 생성 튜토리얼
이 문서에서는 Unity에서 간단한 차량을 생성하는 방법을 설명합니다. 기본 개념과 필요한 코드 스니펫을 제공합니다. 이 튜토리얼에서는 Wheel Collider를 이용해 차량을 만들고, 물리 엔진을 활용하여 자동차를 조종하는 방법을 배웁니다.
1. 기본 지형 만들기
- Unity 에디터에서
GameObject > 3D Object > Plane
을 선택하여 바닥을 만듭니다. - Plane의 Transform 컴포넌트에서 설정 톱니바퀴 아이콘을 클릭한 후
Reset
을 선택하여 위치를 초기화합니다. - Scale을
(100, 1, 100)
으로 설정하여 Plane을 더 크게 만듭니다.
2. 차량 구조 생성
GameObject > Create Empty
로 빈 게임 오브젝트를 생성합니다. 이름을car_root
로 변경합니다.car_root
에Physics 3D Rigidbody
컴포넌트를 추가하고, 질량을 1,500kg로 변경합니다.GameObject > 3D Object > Cube
를 선택하여 차량의 바디 콜라이더로 사용할 큐브를 만듭니다. 이 큐브를car_root
의 자식으로 만듭니다.- Transform을 초기화한 후 Z축 Scale을 3으로 설정합니다.
3. 휠 루트 및 생성
car_root
를 선택하고GameObject > Create Empty Child
를 사용하여 휠의 루트를 추가합니다. 이름을wheels
로 변경합니다.wheels
게임 오브젝트 안에frontLeft
라는 이름의 빈 게임 오브젝트를 생성합니다. Transform을 초기화한 후 아래의 설정을 적용합니다:- Position: X = -1, Y = 0, Z = 1
- Wheel Collider 추가:
Add Component > Physics > Wheel Collider
frontLeft
를 복제하여frontRight
를 만듭니다. 이 때, Position의 X를 1로 변경합니다.rearLeft
와rearRight
를 추가하기 위해frontLeft
와frontRight
를 복제하고, 두 오브젝트의 Z 위치를 –1로 설정하여 이름을 각각 변경합니다.
4. 차량 컨트롤러 스크립트 작성
이제 차량을 실제로 조종할 수 있도록 컨트롤러를 작성합니다. 아래의 코드를 새로운 C# 스크립트에 추가합니다.
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class SimpleCarController : MonoBehaviour {
public List<AxleInfo> axleInfos; // 각 축에 대한 정보
public float maxMotorTorque; // 최대 모터 토크
public float maxSteeringAngle; // 최대 스티어링 각도
public void FixedUpdate() {
float motor = maxMotorTorque * Input.GetAxis("Vertical");
float steering = maxSteeringAngle * Input.GetAxis("Horizontal");
foreach (AxleInfo axleInfo in axleInfos) {
if (axleInfo.steering) {
axleInfo.leftWheel.steerAngle = steering;
axleInfo.rightWheel.steerAngle = steering;
}
if (axleInfo.motor) {
axleInfo.leftWheel.motorTorque = motor;
axleInfo.rightWheel.motorTorque = motor;
}
}
}
}
[System.Serializable]
public class AxleInfo {
public WheelCollider leftWheel;
public WheelCollider rightWheel;
public bool motor; // 이 휠은 모터에 연결되어 있는가?
public bool steering; // 이 휠은 스티어링 각도를 적용하는가?
}
스크립트 파라미터 조정
car_root
게임 오브젝트에서 이 스크립트를 추가하고, 인스펙터에서 필요한 값을 조정합니다.
5. 비주얼 휠 추가
휠 콜라이더는 시뮬레이션된 휠의 포지션과 회전을 적용하지 않으므로 비주얼 휠을 추가해야 합니다. 아래의 코드를 기존 스크립트에 통합합니다.
public void ApplyLocalPositionToVisuals(WheelCollider collider) {
if (collider.transform.childCount == 0) {
return;
}
Transform visualWheel = collider.transform.GetChild(0);
Vector3 position;
Quaternion rotation;
collider.GetWorldPose(out position, out rotation);
visualWheel.transform.position = position;
visualWheel.transform.rotation = rotation;
}
6. Force App Point Distance 설정
Wheel Collider의 중요한 파라미터 중 하나인 Force App Point Distance
를 설정합니다. 기본값은 0이며, 자동차의 무게 중심보다 약간 낮게 설정하는 것이 좋습니다.
항목 | 설명 |
---|---|
Plane | 차량이 주행할 수 있는 바닥 생성 |
Rigidbody | 차량의 물리적 특성을 정의하기 위해 car_root에 추가 |
Wheel Colliders | 각 휠의 물리적 상호작용을 정의 |
차량 컨트롤러 | 차량의 움직임을 제어하는 스크립트 |
이 튜토리얼을 통해 간단한 차량을 만들 수 있게 되었으며, 다양한 설정을 통해 더 복잡한 차량을 생성할 수 있습니다. 직접 실험하여 원하는 차량을 만들어 보세요!