Найти в Дзене
SHERO GAME

Простое управление автомобилем в Unity

В этом руководстве разберем, как реализовать реалистичное управление автомобилем в Unity с поворотом колес и физикой движения. Создайте C# скрипт CarController и прикрепите его к корпусу машины. csharp Copy Download using UnityEngine;
public class CarController : MonoBehaviour
{
[Header("Wheel Colliders")]
public WheelCollider frontLeftWheel;
public WheelCollider frontRightWheel;
public WheelCollider rearLeftWheel;
public WheelCollider rearRightWheel;
[Header("Car Settings")]
public float maxMotorTorque = 500f; // Мощность двигателя
public float maxSteeringAngle = 30f; // Угол поворота колес
public float brakeTorque = 1000f; // Сила торможения
private float motorInput;
private float steeringInput;
private bool isBraking;
void Update()
{
// Получаем ввод с клавиатуры
motorInput = Input.GetAxis("Vertical");
steeringInput = Input.GetAxis("Horizontal");
isBraking = Input.GetKey(KeyCode.Space);
Оглавление

В этом руководстве разберем, как реализовать реалистичное управление автомобилем в Unity с поворотом колес и физикой движения.

1. Подготовка модели автомобиля

  1. Импортируйте модель машины в Unity (желательно с отдельными колесами).
  2. Настройте коллайдеры:
    Добавьте
    Mesh Collider на кузов.
    Для колес используйте
    Capsule Collider или Wheel Collider (лучший вариант).
  3. Добавьте Rigidbody на корпус автомобиля.

2. Настройка колес

  1. Добавьте Wheel Collider на каждое колесо (4 штуки).
  2. Привяжите визуальные колеса к коллайдерам:
    В каждом
    Wheel Collider укажите поле "Visual Wheel" (перетащите 3D-модель колеса).
  3. Настройте параметры Wheel Collider:
    Mass (масса) – 20-40 (зависит от размера авто).
    Radius – подберите под размер колеса.
    Suspension Distance – высота подвески (~0.2-0.5).

3. Скрипт управления автомобилем

Создайте C# скрипт CarController и прикрепите его к корпусу машины.

csharp

Copy

Download

using UnityEngine;

public class CarController : MonoBehaviour
{
[Header("Wheel Colliders")]
public WheelCollider frontLeftWheel;
public WheelCollider frontRightWheel;
public WheelCollider rearLeftWheel;
public WheelCollider rearRightWheel;

[Header("Car Settings")]
public float maxMotorTorque = 500f; // Мощность двигателя
public float maxSteeringAngle = 30f; // Угол поворота колес
public float brakeTorque = 1000f; // Сила торможения

private float motorInput;
private float steeringInput;
private bool isBraking;

void Update()
{
// Получаем ввод с клавиатуры
motorInput = Input.GetAxis("Vertical");
steeringInput = Input.GetAxis("Horizontal");
isBraking = Input.GetKey(KeyCode.Space);

// Поворот колес
frontLeftWheel.steerAngle = maxSteeringAngle * steeringInput;
frontRightWheel.steerAngle = maxSteeringAngle * steeringInput;

// Ускорение и торможение
if (!isBraking)
{
rearLeftWheel.motorTorque = maxMotorTorque * motorInput;
rearRightWheel.motorTorque = maxMotorTorque * motorInput;
rearLeftWheel.brakeTorque = 0;
rearRightWheel.brakeTorque = 0;
}
else
{
rearLeftWheel.brakeTorque = brakeTorque;
rearRightWheel.brakeTorque = brakeTorque;
rearLeftWheel.motorTorque = 0;
rearRightWheel.motorTorque = 0;
}
}

// Обновляем позицию визуальных колес
void FixedUpdate()
{
UpdateWheelVisuals(frontLeftWheel);
UpdateWheelVisuals(frontRightWheel);
UpdateWheelVisuals(rearLeftWheel);
UpdateWheelVisuals(rearRightWheel);
}

void UpdateWheelVisuals(WheelCollider collider)
{
if (collider.transform.childCount == 0) return;

Transform visualWheel = collider.transform.GetChild(0);
collider.GetWorldPose(out Vector3 position, out Quaternion rotation);

visualWheel.position = position;
visualWheel.rotation = rotation;
}
}

4. Дополнительные улучшения

1. Плавность управления

  • Добавьте Smoothing для ввода:

csharp

Copy

Download

steeringInput = Mathf.Lerp(steeringInput, Input.GetAxis("Horizontal"), Time.deltaTime * 5f);

2. Эффект дрифта

Настройте Forward Friction и Sideways Friction в Wheel Collider для более резких поворотов.

3. Звук двигателя

Добавьте AudioSource и меняйте pitch в зависимости от скорости:

csharp

Copy

Download

public AudioSource engineSound;
public float minPitch = 0.5f;
public float maxPitch = 2f;

void Update()
{
float speed = rb.velocity.magnitude;
engineSound.pitch = Mathf.Lerp(minPitch, maxPitch, speed / 20f);
}

5. Тестирование

  1. Запустите сцену.
  2. W/S – движение вперед/назад.
  3. A/D – поворот колес.
  4. Пробел – торможение.

Теги для SEO

#Unity #CarController #GameDev #Unity3D #WheelCollider #УправлениеАвтомобилем #PhysX #Геймдев #Rigidbody #ИндиРазработка