Руководство к Car Tutorial (Unity3d): Изучение альтернативной физической модели (часть 1 из 3)

  • Tutorial
Прежде чем начнем, хочу предупредить, что это не перевод официального руководства, а мое личное руководство к установке физики на автомобиль.

Часть 1
Часть 2
Часть 3

Изучение альтернативной физической модели:


Часть 2
Часть 3

В официальном руководстве говорилось о физике автомобиля, которая имеет упрощенную модель и имеет много недостатков, которые можно прочитать в самом конце Часть 3 руководства. Или посмотреть это видео:



P.S Для тех у кого модели экспортированы, можем сразу же перейти к настройке автомобиля Переход, а так же могут просмотреть видео по настройки автомобиля (дополнение к статье) :



Итак, давайте приступим по-порядку.

Для начала скачаем скрипты, которые нам понадобятся (cкачать), в каждом скрипте представлены комментарии, мы кратко изучим описание каждого скрипта. Что бы иметь общее представление.

Изучим описание скриптов.


AerodynamicResistance.cs: Этот скрипт, должен быть добавлен к каждому автомобилю, чтобы вычислить аэродинамическое трение автомобиля.

AntiRollBar.cs: При необходимости добавьте, чтобы имитировать стабилизатор поперечной устойчивости для лучшей управляемости.

CarController.cs: скрипт для обработки управления автомобилем. Этот скрипт необходим для каждого автомобиля. Вы можете редактировать этот скрипт, если вы хотите изменить управление автомобилем или реализовать ИИ. Также устанавливает некоторые характеристики корпуса автомобилей, таких как центр тяжести и инерции.

CarCamera.cs: Скрипт для камеры. Который после настроек будет следить за нашим авто.

Drivetrain.cs: двигатель и трансмиссия автомобиля. Этот скрипт содержит коробку передач и двигатель. Один из скриптов необходимый в автомобиле.

SoundController.cs: Простой класс, чтобы проигрывать звуки автомобиля и другие звуки. Этот скрипт должен быть добавлен на автомобиль.

TractionHelper.cs: При необходимости добавьте этот скрипт на автомобиль, чтобы сделать его более устойчивым.

Wheel.cs: Этот скрипт имитирует модели шин и подвески колес, и действует в качестве замены в Unity встроенного компонента Wheel Collider.

Wing.cs: Добавьте один скрипт или более одного, если вы хотите имитировать прижимную силу аэродинамики для вашего автомобиля.

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


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

Blender использует правостороннюю систему координат с осью Z, направленной вверх. Такую систему координат используют почти все САПР. Смотрите рисунок:

image

Unity3d как почти любой другой игровой движок использует левостороннюю систему координат. Когда Y направлен вверх, X — вбок, Z- вперед. Смотрим рисунок:

image

Следовательно сначала для правильного экспорта автомобиля, мы должны для себя уяснить, что Z+ это будет направление в игре когда автомобиль движется вперед, (Z-) — направление когда автомобиль движется назад. (X+-) это направления поворота вбок — но это в Unity, которая использует левостороннюю систему координат. А в правосторонней системе координат (Blender, 3ds max) Y+ это будет направление когда автомобиль смотрит вперед и (X+-) это направления вбок. Это значит что автомобиль должен стоять в сцене так, как на рисунке, в противном случае ждите проблем с физикой:

image

Все параметры вращения должны стоять на 0 для дальнейшей работы и для правильной генерации Меша (Mesh), надо Scale установить по умолчанию. Для этого мы сделаем следующие действия в Blender.

1)Выделим все объекты в сцене (клавиша A)
2)Object>Apply>Rotate & Scale.

Смотрите рисунок:

image

Теперь все параметры вращения приняты и установлены на 0. А параметры масштабирования (Scale) установлены на по умолчанию (1). Смотрим рисунок:

image

Теперь можем делать «Правильный экспорт» из правосторонней системы координат в левостороннюю систему координат.

1)Выделим все объекты (клавиша A)
2)Жмем последовательность R>X>-90.
3)Object>Apply>Rotate.
4)Жмем последовательность R>X>90.

Обязательно делайте в данной последовательности. Далее экспортируем модель в Unity. File>Export>FBX со следующими настройками:

image

После экспорта модели, идем в папку с этой моделью и копируем папку Textures (папку с текстурами) и наш FBX файл. В папку Assets нашего проект. Это позволит Unity импортировать модель прямо с текстурами, которые были настроены в Blender.

Ресурсы игры:

image


Настройка автомобиля


Видео по настройке автомобиля (дополнение к статье)

Создадим Prefab и закинем наш объект в Prefab.
1)Вкладка Assets>Create>Prefab
2)Переименуем new prefab в Car
3)Перетащим методом D&D наш Ассет Vaz_2106_mesh в наш Prefab с именем Car.
4)Перетащим методом D&D наш Prefab с именем Car на сцену.

Структура Prefab Car следующая:

image

VAZ2106_Car_body — Содержит множество элементов, это и двери и фары и бампера и т.д (упрощенная структура автомобиля)
VAZ2106_Car_window — Окна автомобиля.
VAZ2106_WheelFL — Переднее левое колесо.
VAZ2106_WheelFR — Переднее правое колесо.
VAZ2106_WheelRL — Заднее левое колесо.
VAZ2106_WheelRR — Заднее правое колесо.

Теперь добавим физику нашему автомобилю.
1) Выделим наш объект — автомобиль (у меня это Car).
2) Перейдем на вкладку Inspector нажмем кнопку Add component>Physics>Rigidbody.
3) Заходим в компонент Rigidbody и делаем настройки (желательно более приближено к оригинальной модели).

В моем случае полная масса автомобиля 1445 кг. Mass= 1445. Все остальные характеристики ставим на 0. т.к они отвечают за сопротивление. А за сопротивление у нас будет отвечать отдельный скрипт AerodynamicResistance.cs.

Настройки Rigidbody у вас должны быть примерно такими:

image

Кроме массы автомобиля.

Создание колёс


Создадим пустой объект для каждого из колёс — (нужно что бы к каждому отдельному колесу применить скрипт Wheel).

1)Правый клик мыши по Prefabs нашего автомобиля > Create Empty
2)Переименуем наш пустой объект с именем GameObject на WheelFL (по аналогии с VAZ2106_WheelFL)
3)Изменим координаты X,Y,Z объекта WheelFL на координаты объекта VAZ2106_WheelFL, а координаты объекта VAZ2106_WheelFL сменим на 0.
4)Перетащим методом D&D наш VAZ2106_WheelFL в объект WheelFL.
5)Повторим пункт 1-4 еще 3 раза меняя название GameObject в соответствии с нашими колесами.

У нас должна получится следующая структура файлов:

image

Далее добавим скрипт Wheel.cs к нашим колесам.
1) Выделим WheelFL перейдем на вкладку inspector.
2) Нажмем кнопку Add component>Script>Wheel.
3) Повторим пунктов 1-2 еще 3 раза к WheelFR, WheelRL, WheelRR.

На каждом колесе должна быть такая структура компонентов:

image

Настройки для колёс.

1) WheelFL:

image

2) WheelFR:

image

3) WheelRL:

image

4) WheelRR:

image

Основные настройки тут:

Radius: — радиус колеса, значение это надо подбирать в зависимости от размера колеса.
Suspresion Travel: — подвеска автомобиля, в прошлых частях речь шла более подробно об этом.
Dumping: — жесткость пружины.

Остальные настройки тоже очень важны, но их я думаю разберем в следующей части.

С колесами закончили.

Добавление центра тяжести и коллайдера автомобиля


Создание центра тяжести


1) Правый клик мыши по Prefabs нашего автомобиля > Create Empty.
2) Переименуем наш пустой объект с именем GameObject на СoG (сокращение center of gravity).
3) Зададим координаты в компоненте Transform объекта CoG так как на рисунках.

Примерно должно выглядеть так:

image
image

Центр тяжести примерно должен быть впереди чуть выше дна автомобиля. но в принципе для каждого автомобиля индивидуально настраивается. Всё это будет отлаживаться во время тестирования.

Создание Collider для тела автомобиля


1) Правый клик мыши по Prefabs нашего автомобиля > Create Empty
2) Переименуем наш пустой объект с именем GameObject на Collider_body
3) Добавим Box Collider компонент. (Add component>Physics>Box Collider)
4) Сделаем настройки компонентов как на рисунке. Возможно у вас будут другие настройки, смотрите как должно покрывать автомобиль Box collider.

image
image
image

Коллайдер нужен для создание столкновений и правильной физики автомобиля.

Создание Collider для крыши автомобиля


1) Правый клик мыши по Prefabs нашего автомобиля > Create Empty.
2) Переименуем наш пустой объект с именем GameObject на Collider_head.
3) Добавим Box Collider компонент (Add component>Physics>Box Collider).
4) Сделаем настройки компонентов как на рисунке. Возможно у вас будут другие настройки, смотрите, как должно покрывать автомобиль Box collider.

image
image
image

Коллайдер нужен для того, что бы, если какой то объект упадет на крышу автомобиля, что бы он взаимодействовал с крышей а не с телом автомобиля.

В общем итоге должно получится что-то вроде этого:

image

Конечно, можно использовать Mesh Collider, но Mesh Collider затребует больше ресурсов чем примитивные объекты. Решать вам.

Создание и настройка автомобиля


Итак, с колесами частично разобрались, настройки колес мы произведем позже, а сейчас мы займемся добавлением компонентов к нашему Prefab car.

1) Выделяем prefab автомобиля.
2) На вкладке inspector жмем кнопку Add Component>Script>Car Controller.

Добавится скрипт CarController и зависимый от него скрип Drivetrain

3) Жмем кнопку Add Component>Script>Sound Controller.
4) Жмем кнопку Add Component>Script>Anti Roll bar.
5) Повторим пункт 4.
6) Жмем кнопку Add Component>Script>Aerodynamic Resistance.
7) Жмем кнопку Add Component>Script>Traction Helper.

image

После того как добавили скрипты, делаем следующие настройки для наших скриптов.

image

image

image

Main Camera — настройки


Осталось последняя часть, сделаем настройки нашей камеры.

1) Жмем кнопку Add Component>Script>Car Camera.
Делаем следующую настройку:

image

Target — объект, на который будет ориентироваться камера.
Height — Высота камеры.
Distance_to_back — дистанции от объекта до камеры.
Distance_from_back — дистанции от объекта до камеры после разгона автомобиля (эффект приближения).

Естественно, все эти настройки надо настраивать под каждый автомобиль индивидуально. Описание всех настроек не приводится, т.к я еще сам разбираюсь в них, и не хотел описывать параметры в которых 100% не уверен. Однако данное руководство может быть отправной точкой для создания собственной модели автомобиля.
  • +6
  • 19,3k
  • 2
Поделиться публикацией

Комментарии 2

    0
    Спасибо за статью.

    В юнити 4.6.1 был создан танк на WheelColliders, полностью настроен и отлажен. При переходе на юнити 5 (в которой они обновили PhysX) танк был полностью сломан, даже не смог с места сдвинутся.

    Когда начал разбираться- оказалось изменились параметры настройки колеса. Добавился параметр Force App Point Distance, параметры асимптот и екстремумов кривых трения были изменены на 0.0 — 1.0 (ранее они были по несколько тысяч).

    Скрин
    image


    Замечу, что при открытии старого проекта в юнити 5 он сам перенастраивает параметры этих компонентов.
    Можно открыть демо проект импортировав в ассетах проект Vehicles (самолеты, машины) и глянуть настройки колес. На самолете WheelCollider виглядит достаточно странно…

    Скрин
    image


    … главное колесо в одном месте, точка физики (или как ее назвать)- в другом. Повторить такое у меня не вышло.

    Сами же колеса при старте карты намертво прилипают к земле, и нужно немалая сила чтоб сдвинуть их с места.
    Есть способ, который вроде бы помогает — скрипт, который дает небольшое кручение колес при старте карты (вешается на геймобжекты с вилл коллайдером):

    using UnityEngine;
    using System.Collections;
    
    public class WheelsStart : MonoBehaviour 
    {
         void Start () 
         {
              GetComponent<WheelCollider>().motorTorque = 0.1f;
         }
    }
    


    С новой физикой добавились хорошие возможности бокового скольжения, без резких дерганий при сцеплении, однако над настройкой колес еще придется попотеть…
      0
      Попробуйте данный метод, он универсален, всё чисто на Api Unity3d без привязки к WheelCollider. (p.s скрины не показывает). Кстати если вы брали за основу WheelCollider, пример из прошлых статей . То там тоже есть свои баги( незнаю как в юнити 5) а в юнити 4.6, автомобиль под углом 85градусов, не съезжал с горы. Собственно видео обзор и сравнение, в начале этой статьи)

    Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

    Самое читаемое