Руководство к Car Tutorial (Unity3d): Изучение альтернативной физической модели (часть 1 из 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, направленной вверх. Такую систему координат используют почти все САПР. Смотрите рисунок:
Unity3d как почти любой другой игровой движок использует левостороннюю систему координат. Когда Y направлен вверх, X — вбок, Z- вперед. Смотрим рисунок:
Следовательно сначала для правильного экспорта автомобиля, мы должны для себя уяснить, что Z+ это будет направление в игре когда автомобиль движется вперед, (Z-) — направление когда автомобиль движется назад. (X+-) это направления поворота вбок — но это в Unity, которая использует левостороннюю систему координат. А в правосторонней системе координат (Blender, 3ds max) Y+ это будет направление когда автомобиль смотрит вперед и (X+-) это направления вбок. Это значит что автомобиль должен стоять в сцене так, как на рисунке, в противном случае ждите проблем с физикой:
Все параметры вращения должны стоять на 0 для дальнейшей работы и для правильной генерации Меша (Mesh), надо Scale установить по умолчанию. Для этого мы сделаем следующие действия в Blender.
1)Выделим все объекты в сцене (клавиша A)
2)Object>Apply>Rotate & Scale.
Теперь все параметры вращения приняты и установлены на 0. А параметры масштабирования (Scale) установлены на по умолчанию (1). Смотрим рисунок:
Теперь можем делать «Правильный экспорт» из правосторонней системы координат в левостороннюю систему координат.
1)Выделим все объекты (клавиша A)
2)Жмем последовательность R>X>-90.
3)Object>Apply>Rotate.
4)Жмем последовательность R>X>90.
Обязательно делайте в данной последовательности. Далее экспортируем модель в Unity. File>Export>FBX со следующими настройками:
После экспорта модели, идем в папку с этой моделью и копируем папку Textures (папку с текстурами) и наш FBX файл. В папку Assets нашего проект. Это позволит Unity импортировать модель прямо с текстурами, которые были настроены в Blender.
Настройка автомобиля
Создадим 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 следующая:
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 у вас должны быть примерно такими:
Кроме массы автомобиля.
Создание колёс
Создадим пустой объект для каждого из колёс — (нужно что бы к каждому отдельному колесу применить скрипт 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 в соответствии с нашими колесами.
У нас должна получится следующая структура файлов:
Далее добавим скрипт Wheel.cs к нашим колесам.
1) Выделим WheelFL перейдем на вкладку inspector.
2) Нажмем кнопку Add component>Script>Wheel.
3) Повторим пунктов 1-2 еще 3 раза к WheelFR, WheelRL, WheelRR.
На каждом колесе должна быть такая структура компонентов:
Настройки для колёс.
Основные настройки тут:
Radius: — радиус колеса, значение это надо подбирать в зависимости от размера колеса.
Suspresion Travel: — подвеска автомобиля, в прошлых частях речь шла более подробно об этом.
Dumping: — жесткость пружины.
Остальные настройки тоже очень важны, но их я думаю разберем в следующей части.
С колесами закончили.
Добавление центра тяжести и коллайдера автомобиля
Создание центра тяжести
1) Правый клик мыши по Prefabs нашего автомобиля > Create Empty.
2) Переименуем наш пустой объект с именем GameObject на СoG (сокращение center of gravity).
3) Зададим координаты в компоненте Transform объекта CoG так как на рисунках.
Примерно должно выглядеть так:
Центр тяжести примерно должен быть впереди чуть выше дна автомобиля. но в принципе для каждого автомобиля индивидуально настраивается. Всё это будет отлаживаться во время тестирования.
Создание Collider для тела автомобиля
1) Правый клик мыши по Prefabs нашего автомобиля > Create Empty
2) Переименуем наш пустой объект с именем GameObject на Collider_body
3) Добавим Box Collider компонент. (Add component>Physics>Box Collider)
4) Сделаем настройки компонентов как на рисунке. Возможно у вас будут другие настройки, смотрите как должно покрывать автомобиль Box collider.
Коллайдер нужен для создание столкновений и правильной физики автомобиля.
Создание Collider для крыши автомобиля
1) Правый клик мыши по Prefabs нашего автомобиля > Create Empty.
2) Переименуем наш пустой объект с именем GameObject на Collider_head.
3) Добавим Box Collider компонент (Add component>Physics>Box Collider).
4) Сделаем настройки компонентов как на рисунке. Возможно у вас будут другие настройки, смотрите, как должно покрывать автомобиль Box collider.
Коллайдер нужен для того, что бы, если какой то объект упадет на крышу автомобиля, что бы он взаимодействовал с крышей а не с телом автомобиля.
В общем итоге должно получится что-то вроде этого:
Конечно, можно использовать 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.
После того как добавили скрипты, делаем следующие настройки для наших скриптов.
Main Camera — настройки
Осталось последняя часть, сделаем настройки нашей камеры.
1) Жмем кнопку Add Component>Script>Car Camera.
Делаем следующую настройку:
Target — объект, на который будет ориентироваться камера.
Height — Высота камеры.
Distance_to_back — дистанции от объекта до камеры.
Distance_from_back — дистанции от объекта до камеры после разгона автомобиля (эффект приближения).
Естественно, все эти настройки надо настраивать под каждый автомобиль индивидуально. Описание всех настроек не приводится, т.к я еще сам разбираюсь в них, и не хотел описывать параметры в которых 100% не уверен. Однако данное руководство может быть отправной точкой для создания собственной модели автомобиля.
- unity3d уроки
- c#
- game development
- разработка игр
- tutorial
- руководство для разработчика
https://habr.com/ru/articles/249363/