Как сделать физику машины в юнити

Простая машинка в Unity

Урок по созданию простой машинки в среде Unity при помощи компонента WheelCollider. Описаны базовые настройки этого компонента. Для понимания урока необходимы базовые знания среды Unity.

Введение

С английским у меня неплохо, поэтому когда понадобилось сделать машинку в проекте, хватило стандартного примера, однако, хоть и написано, что он «аркадный», все же пример затрагивает гораздо больше вопросов, и один только pdf документ весит 11 мб, а сам пример 212 мб.

Как сделать физику машины в юнити. Смотреть фото Как сделать физику машины в юнити. Смотреть картинку Как сделать физику машины в юнити. Картинка про Как сделать физику машины в юнити. Фото Как сделать физику машины в юнити

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

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

Создаем по шагам

1. Итак создадим четыре пустых объекта для удобной иерархии в нашем объекте:

    carRoot — контейнер для всех элементов машины (геометрия, свет, камеры, объекты для скриптов)
    car — контейнер для объектов именно машины,
    physic — контейнер для физических моделей колес,
    graphic — графические объекты.

Как сделать физику машины в юнити. Смотреть фото Как сделать физику машины в юнити. Смотреть картинку Как сделать физику машины в юнити. Картинка про Как сделать физику машины в юнити. Фото Как сделать физику машины в юнити

2. Добавим в carRoot камеру и закинем на нее стандартный скрипт SmoothFollow, однако на 32 строке добавим или внешнюю переменную angle, или просто добавим поворот на 90 градусов, так как стандартный скрипт заставляет камеру быть сбоку от объекта :

Как сделать физику машины в юнити. Смотреть фото Как сделать физику машины в юнити. Смотреть картинку Как сделать физику машины в юнити. Картинка про Как сделать физику машины в юнити. Фото Как сделать физику машины в юнити

3. в car добавляем компонент RigidBody, его масса — это масса корпуса машины, она будет влиять на устойчивость и на то, насколько сильно он прижимает колеса.

Для того чтобы на поворотах нас не сильно заносило, и при падении машина возвращалась в правильное положение, а не переворачивалась, нам потребуется два изменения — компонент ConstantForce в car, который будет прижимать машину на поворотах, кроме того, переместим центр массы машины вниз, добавив на нее скрипт carControl с кодом вроде этого:

Как сделать физику машины в юнити. Смотреть фото Как сделать физику машины в юнити. Смотреть картинку Как сделать физику машины в юнити. Картинка про Как сделать физику машины в юнити. Фото Как сделать физику машины в юнити

4. В physic создаем пустой объект body с компонентом CapsuleCollider — это будет простой корпус машины, обтекаемый и не дающий застревать в стенках.

Как сделать физику машины в юнити. Смотреть фото Как сделать физику машины в юнити. Смотреть картинку Как сделать физику машины в юнити. Картинка про Как сделать физику машины в юнити. Фото Как сделать физику машины в юнити

5. создаем пустой объект wheel_BL и добавляем ему компонент WheelCollider, и настраиваем его:

    Center — расположение колеса,
    Radius — радиус колеса,
    Suspension Distance — длинна пружин подвески.

Suspension Spring : Spring — сила пружины подвески, чем выше тем сильнее пружинит,
Suspension Spring : Damper — сила амортизатора, делает более плавным движение пружины.

Mass — масса колес, опять же влияет на поведение на заносах, прыжках.

Как сделать физику машины в юнити. Смотреть фото Как сделать физику машины в юнити. Смотреть картинку Как сделать физику машины в юнити. Картинка про Как сделать физику машины в юнити. Фото Как сделать физику машины в юнити

Теперь добавим в объект wheel_BL простой цилиндрический меш, чтобы так сказать, иметь отладочную версию, впрочем, можно ограничится тем, что Unity нам и так предоставляет.

Как сделать физику машины в юнити. Смотреть фото Как сделать физику машины в юнити. Смотреть картинку Как сделать физику машины в юнити. Картинка про Как сделать физику машины в юнити. Фото Как сделать физику машины в юнити

6. Раскопируем наше колесо до нужного числа, например, 4 — в принципе, машинка уже готова.

Как сделать физику машины в юнити. Смотреть фото Как сделать физику машины в юнити. Смотреть картинку Как сделать физику машины в юнити. Картинка про Как сделать физику машины в юнити. Фото Как сделать физику машины в юнити

Теперь нам нужно только заставить колеса вращаться с ускорением по нажатию клавиш и поворачиваться, что можно сделать например так :

Заключение

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

Источник

Unity3d Tank Tutorial: Ходовая часть (Урок 1. Основы механики транспортного средства)

Как сделать физику машины в юнити. Смотреть фото Как сделать физику машины в юнити. Смотреть картинку Как сделать физику машины в юнити. Картинка про Как сделать физику машины в юнити. Фото Как сделать физику машины в юнити

Вступление

Итак вы уже не новички в Unity, вы умеете создавать сцену, расставлять объекты на сцене, создавать terrain, делать префабы и тд… и главное — работать со скриптами, либо вы уже изучили статьи: Unity3D для начинающих — Туториал 1 и Unity3d script basics. Все эти знания вам пригодятся ведь в этом уроке мы двинемся намного дальше.

А именно: в первой части этого урока вы узнаете что такое Wheel Collider, как с помощью него управлять транспортным средством и создать реалистичное поведение подвески автомобиля, во второй части урока, на основе всего этого я покажу как сделать ходовую часть танка с соответствующей физикой и контроллерами.

Собственно то что вы видите на изображении сверху (это будет результат данного урока) вы можете опробовать «вживую» прямо в браузере. Хотите сделать это сами? Тогда добро пожаловать под кат

Перед тем как начать рассказывать об основах моделирования механики автомобиля на Unity я не могу не отметить что на официальном сайте уже есть уроки на эту тему например здесь. Правда на протяжении всего этого даются лишь указания на то, какой скрипт прикрепить к какому объекту и лишь изредка объясняют чтонибудь полезное, в третьей части урока наконец то объясняют как работает главный скрипт, хотя по моему это надо было делать в самой первой части, и начинать объяснять с того момента как работают wheel collider’ы и как они взаимодействуют с rigidbody, в итоге я сделал вывод что данный урок не рассчитан на новичков в Unity и хочу это исправить.

Но если вы уже знаете что такое Wheel Collider и с чем его едят, то вы можете пропустить этот урок.

1. Создаем «Автомобиль»

Для начала проделайте стандартные процедуры, создайте сцену, создайте terrain, либо используйте уже готовые, затем создайте пустой Game Object(GO), (GameObject->Create Empty), назовем его какнибудь оригинально, например Car.

Как сделать физику машины в юнити. Смотреть фото Как сделать физику машины в юнити. Смотреть картинку Как сделать физику машины в юнити. Картинка про Как сделать физику машины в юнити. Фото Как сделать физику машины в юнити

Итак, наш суперкар почти готов! Поднимите его немного над поверхностью terrain’а и нажмите Play, автомобиль упадет на землю и встанет колом на колеса, о мягкой подвеске ему еще только мечтать, выходите из Play mode. Как видите у наших колес имеется компонент под названием Capsule Collider, а у кузова Box Collider, я не буду рассказывать в этом уроке что такое коллизии и как на основе них рассчитать положение объекта в пространстве, объясню проще: если у объекта имеется какой – либо из простых collider’ов (Box, Capsule, Mesh,…) то этот объект может взаимодействовать с другими объектами содержащими Rigidbody и один или несколько collider’ов, в свою очередь объект содержащий Rigidbody будет вычислять свою позицию на основе столкновений всех подчиненных ему collider’ов и назначенных им физических материалов.

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

А пока что выберите каждое из наших колес и удалите у них Capsule Collider (Правой кнопкой по нему и Remove Component). Нажмите Play, теперь автомобиль больше не стоит на колесах, они прошли сквозь террейн и взаимодействует с поверхностью у нас теперь только кузов.

2. Добавляем Wheel Colliders

Как сделать физику машины в юнити. Смотреть фото Как сделать физику машины в юнити. Смотреть картинку Как сделать физику машины в юнити. Картинка про Как сделать физику машины в юнити. Фото Как сделать физику машины в юнити

Нажмите Play, автомобиль упадет и опять встанет на колеса (кстати если колеса все равно проходят сквозь террейн, это значит что автомобиль падает на землю с очень большой скоростью, и вам просто напросто нужно уменьшить расстояние до земли, либо увеличите параметр Drag у Rigidbody). Как видите результат не сильно отличается от того где у нас на колёсах стояли Capsule Colliders, все правильно, потому, что мы не задали нашим Wheel Collider’ам никаких параметров.

Итак, нажмите Play сейчас, посмотрите, наш автомобиль ведет себя теперь совсем по другому, теперь он пружинит от поверхности террейна, а если вы поставите его на склон какой нибудь горки, он покатится с неё, вот так у нас работают Wheel Collider’ы.

Но это далеко не все на что они способны, давайте выясним как с помощью них управлять автомобилем и сделать так чтобы наши колеса крутились и реагировали на неровности ландшафта. Начинаем скриптовать!

3. Управляем Wheel Collider’ами

В этом уроке я буду писать скрипты на C#, простите меня JavaScript’еры, он мне привычнее, я думаю вы разберетесь.

Далее работаем с нашими коллайдерами, дополняем скрипт:

Теперь можете нажать Play, и используя кнопки W,S или стрелки вперед — назад, привести в движение нашу «формулу один», а кнопками A,D, или стрелками влево – вправо, поворачивать.

Давайте обо всем по порядку.

4. Центр тяжести

Задается он удивительно просто, во первых нам надо создать пустой GO, назовем его Center of mass, затем перетянуть его на объект Car, и разместить его приблизительно там где вы считаете он должен быть, например чтобы моё авто не переворачивалось при повороте на высокой скорости мне пришлось сделать его вот так:

Как сделать физику машины в юнити. Смотреть фото Как сделать физику машины в юнити. Смотреть картинку Как сделать физику машины в юнити. Картинка про Как сделать физику машины в юнити. Фото Как сделать физику машины в юнити

Как сделать физику машины в юнити. Смотреть фото Как сделать физику машины в юнити. Смотреть картинку Как сделать физику машины в юнити. Картинка про Как сделать физику машины в юнити. Фото Как сделать физику машины в юнити

5. «Оживляем» колеса

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

Для того чтобы оживить колесо, нам необходимо вычислять позицию и угол его вращения в каждом фиксированном кадре, в этом нам опять поможет чудесный WheelCollider, его метод GetGroundHit(), который способен вернуть структуру WheelHit в которой в свою очередь содержится точка соприкосновения коллайдера и террейна (переменная point). Благодаря методу GetGroundHit() мы можем вычислить позицию колеса на основе движения пружины подвески. Ну а что касается угла поворота – это совсем просто, в WheelCollider’е есть float переменная rpm, это аббревиатура от rotation per minute, на её основе мы и можем определить угол вращения колеса.

Переходим собственно к скрипту, он вырос, потолстел и теперь выглядит так:

Скопируйте его, вставьте в свой скрипт, затем во вкладке hierarchy выберите наш объект Car, как вы можете видеть в инспекторе у нас появились новые переменные и массивы в скрипте, в массивы wheelsF и wheelsB необходимо передать передние и задние колеса соответственно, (колеса а не Wheel Collier’ы!) как сделаете это нажмите Play. Если колеса уходят под террейн то поменяйте значение переменной wheelRadius, оно должно примерно совпадать с радиусом ваших коллайдеров.

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

Как сделать физику машины в юнити. Смотреть фото Как сделать физику машины в юнити. Смотреть картинку Как сделать физику машины в юнити. Картинка про Как сделать физику машины в юнити. Фото Как сделать физику машины в юнити

Заключение

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

Ну а в следующей части урока я как и обещал расскажу о том как построить механику гусениц танка, также я расскажу о методах его моделирования в 3D редакторе и немного про экспорт модели из него и импорт в Unity ну и естественно я не буду вас заставлять моделировать то что вы видели в данном демо, а предоставлю уже готовую модель. Спасибо за внимание и удачи в изучении Unity3d.

Источник

Руководство к Car Tutorial (Unity3d) часть 1 из 3

Это переведенное руководство для проекта ссылка или альтернативная ссылка на проект с исправленными ошибками под Unity3d 4.6.

P.S Оригинал руководства, находится в самом проекте ввиде 3ех PDF файлов, в папке Assets.

Данный архив был заменен на UnityPacked. В этом проекте уже залит архив со скриптами переписанными на C# находящийся в папке Assets\Scripts\CSharpScripts. Порядок установки:

1) Запускаем Unity3d и создает пустой проект.
2) Импортируем наш проект > (Assets/Import Package/Custom Package).
3) Дожидаемся импорта всех ресурсов и вуаля наш проект импортирован.
4) ВНИМАНИЕ. если хотите использовать все C# скрипты, надо удалить предварительно JS скрипты из проекта и из

Prefabs, а затем распаковать архив C# скриптов и использовать эти скрипты.

Отдельное спасибо команде Zionn Game Room за перевод официальных и не официальных видеоуроков по Unity3d на русский язык. И так, приступим к изучению нашего руководства.

Введение

Цель этого руководства является показать вам, как создать гоночную игру в Unity3d. Мы создадим автомобиль из 3D-моделей, скриптов и компонентов. Мы предоставляем вам полноценный проект гоночного симулятора, где вы можете играть и изучать готовые сцены. Мы также предоставим вам сцену которая полностью готова для игры, кроме автомобиля над которым вы можете потренироваться с помощью этого руководства.

Что мы изучим?

Начнем с того о чем это руководство. Оно разделено на три части, которые независимы друг от друга:

1. Сборка автомобиля
Как собрать автомобильный префаб (Car Prefab) из 3D-модели, скриптов и компонентов. Это текущий раздел.

2. Тонкая настройка автомобиля
Как правильно настроить автомобиль.

3. Под капотом
Более глубокий взгляд на исходный код, который приводит в движение автомобиль.

Необходимые условия

Мы не будем изучать:

• Остальные скрипты.
• Основы Unity3d. Мы не будем вдаваться в подробности с объяснением основ работы скриптов и компонентов Unity3d. Для этого есть много других ресурсов по адресам:
ссылка №1
ссылка №2

Руководство пользователя и скриптов Unity3d ценные спутники при изучении этого руководства. Мы предлагаем вам посетить эти ресурсы, когда вы сталкиваетесь со встроенными компонентами или функциями, о которых вы хотели бы узнать больше.

Подход к изучению является аналогом «Обезъяна видит, обезьяна повторяет»: вы следуете инструкциям, которые мы даем о создании автомобиля и изменении его переменных.

Надеюсь, вы поймете, как оно работает всё вместе и сами начнете разбираться в этом. Не стесняйтесь изучать.

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

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

Мы уверены, что вы узнаете многое, после того как ознакомитесь со всеми руководствами.

Часть 1: Сборка автомобиля

Скачайте архив с папкой проекта или альтернативная ссылка на проект с исправленными ошибками под Unity3d 4.6. Начните с открытия сцены с именем ‘CompleteScene‘. Эта сцена имеет настроенный автомобиль, вы можете попробовать поиграть нажав кнопку воспроизведения (Play). Это продемонстрирует вам конечный результат того, что мы собираемся сделать.

Как сделать физику машины в юнити. Смотреть фото Как сделать физику машины в юнити. Смотреть картинку Как сделать физику машины в юнити. Картинка про Как сделать физику машины в юнити. Фото Как сделать физику машины в юнити

Когда вы закончите играть, откройте сцену под названием ‘TheTrack’. Эта сцена содержит все что нужно для гоночного симулятора, за исключением наиболее важной части — автомобиля.

Теперь перетащите модель автомобиля в сцену. В окне проекта (Project view) вы находим его в Models/Car/catamount,

В зависимости от того, куда вы перетащили автомобиль, вы вероятно захотите изменить его позицию на более подходящую.
Я полагаю, что вы измените позицию автомобиля в инспекторе (inspector) на (860, 102.3, 878) и установите его Y-вращение (Rotate) 130.

Для остальной части руководства, этот игровой объект будет называться «Car», так что вы можете переименовать его сейчас.

Как сделать физику машины в юнити. Смотреть фото Как сделать физику машины в юнити. Смотреть картинку Как сделать физику машины в юнити. Картинка про Как сделать физику машины в юнити. Фото Как сделать физику машины в юнити

Это просто 3D модель автомобиля. Если вы посмотрите в инспектор, вы увидите, что она содержит множество дочерних объектов, такие как «тело» автомобиля, окна автомобиля и колеса. Она также содержит две простые сетки, которые мы будем использовать для коллайдеров (colliders) автомобиля. Не волнуйтесь, они сейчас не видны, мы изменим это. Потратьте некоторое время на изучение того как устроен автомобиль и как они связаны друг с другом в иерархии (hierarchy).

По ряду причин мы для автомобиля создали свой слой. С игровым объектом ‘Car’ разобрались, перейдите в инспектор и выберите «Car» в слоях выпадающего меню. В контекстном меню нажмите «Да, изменить дочерний объект (Yes, change children)», чтобы применить, изменения применяются ко всем объектам в иерархии автомобиля.

У игрового объекта «Car» есть компонент анимации, который устанавливается по умолчанию. Поскольку это не то, что мы собираемся использовать, пойдем дальше и немного подчистим, нажав на маленькое колесо справа компонента анимации (Animation Component) и выберите «Remove Component (Удалить компонент)».

Добавление столкновений (Collision)

Как сделать физику машины в юнити. Смотреть фото Как сделать физику машины в юнити. Смотреть картинку Как сделать физику машины в юнити. Картинка про Как сделать физику машины в юнити. Фото Как сделать физику машины в юнити

Теперь мы настроим компоненты столкновения (Collision) для автомобиля, предотвратив его от падения за сцену, когда сцена активна. Вместо того чтобы использовать сложные сетки в качестве коллайдеров (colliders) на основе настоящей сетки машины, мы создали две сетки, что гораздо проще, которые соответствуют верхней и нижней части автомобиля. Для повышения производительности мы используем эти сетки в качестве модели столкновений.

• Нажмите на игровой объект Collider_Bottom, который находится как дочерний объект, объекта ‘Car’ (автомобиль).
• Перейдите в меню Component/Physics и нажмите MeshCollider добавив к объекту игры.
• Нажмите Material в выпадающем селекторе на вновь добавленном компоненте MeshCollider и выберите physics material.
• Проверьте что бы стояли галочки на двух квадратах (checkbox) ‘Smooth Sphere Collisions’ и ‘Convex’
• Так как коллайдеры будут невидимыми, удалите MeshRenderer и MeshFilter компоненты из игрового объекта (Нажмите на маленькое зубчатое колесо справа компонентов и выберите пункт «Удалить компонент» (‘Remove Component’).
• Сделайте то же самое что описано выше для игрового объекта Collider_Top.

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

Мы собираемся изменить настройки теней для модели автомобиля «Car» по двум причинам. Прежде всего отключение теней в объектах, которые на самом деле не нуждаются в ней очень хорошая практика для повышения производительности. Во-вторых, мы считаем, что автомобиль будет выглядить лучше когда настроим тени. Это может быть более приятным для глаз, когда тени появляются и исчезают на автомобиле, во время его передвижения с большой скоростью по сцене. Если вы хотите более реалистичное поведение теней, это вполне возможно. Просто измените настройки в соответствии с вашими желаниями.

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

Термины:

enabled — включено
disabled — выключено
Cast Shadows — отбрасывающие тени
Receive Shadows — полученые тени
Body — корпус автомобиля
Body Interior — корпус салона
Car Windows — окна автомобиля
DiscBrakes — Дисковые тормоза
Wheels — Колеса.

Body: Cast Shadows enabled. Receive Shadows disabled
Body Interior: Cast Shadows enabled. Receive Shadows disabled
Car Windows: Cast and Receive Shadows disabled
DiscBrakes: Cast and Receive Shadows disabled
Wheels: Cast Shadows enabled. Receive shadows disabled.

Добавление компонентов автомобиля

Теперь давайте начнем добавлять компоненты, необходимые для правильной работы автомобиля (игрового объекта ‘Car’)

Как сделать физику машины в юнити. Смотреть фото Как сделать физику машины в юнити. Смотреть картинку Как сделать физику машины в юнити. Картинка про Как сделать физику машины в юнити. Фото Как сделать физику машины в юнити

Прежде всего, нам нужен способ контролировать положение автомобиля в мире с помощью физической симуляции, и встроенный в компонент Rigidbody идеально подходит для этого. Выберите игровой объект «Car», перейдите в меню Components и выберите Physics/RigidBody. Подтвердите сообщение Unity3d, которое сообщает вам о потере prefabсоединений и наблюдаем, как игровой объект теперь имеет Rigidbody компонент прикрепленный в качестве одного из его компонентов.

• Автомобиль очевидно весит больше, чем просто один килограмм, так что начнем с изменения массы (Mass) в Rigidbody на что-то более реалистичное, допустим 1500кг.
• Далее мы имеем возможность изменить angularDrag свойство, это силы которые замедляют скорость и вращение Rigidbody. Мы будем контролировать сопротивление автомобиля с помощью скриптов, так что просто установите свойство angularDrag в 0.
• Найдите скрипт Car.js в папке ‘scripts/JavaScripts’ и перетащите его на игровой объект «Car». Этот скрипт является «двигателем» автомобиля, на объяснения скрипта мы сосредоточимся более подробно в конце этого руководства.

Компонент-скрипт «Car.js» имеет много различных переменных, которые будут объясняться, когда мы начнем настройки автомобиля, еще более подробно мы расскажем когда будем изучать код. Сейчас мы просто хотим настроить то что нужно, чтобы иметь возможность управлять автомобилем на трассе.

Как сделать физику машины в юнити. Смотреть фото Как сделать физику машины в юнити. Смотреть картинку Как сделать физику машины в юнити. Картинка про Как сделать физику машины в юнити. Фото Как сделать физику машины в юнити

Прежде всего, скрипт «Car» должен знать о колесах, которые имеет автомобиль. В инспекторе вы увидите передние колеса (Front Wheels) и задние колеса (Rear Wheels), обратите внимание, что оба они могут быть расширены путем нажатия на маленькую стрелку слева от имени.

Добавление blob теней

Как сделать физику машины в юнити. Смотреть фото Как сделать физику машины в юнити. Смотреть картинку Как сделать физику машины в юнити. Картинка про Как сделать физику машины в юнити. Фото Как сделать физику машины в юнити

Направленный свет сделает у автомобиля хорошую blob тень на дороге, если тени разрешены в вашем проекте. Мы также хотим, добавить тень под машину, как показано на этом изображении.

Для этого мы будем использовать проектор, который проецирует Blob тень, напоминающую форму автомобиля на дороге непосредственно под машиной. Проектор встроенный в компонент, который работает так же, как настоящий проектор. Вы указываете текстуру, которую хотите передавать, и на основе настроек для проектора и (расстояния до цели), тень будет опираться на те текстуры объектов, которые находятся на пути света проектора.

• В иерархии, создайте пустой игровой объект и перетащите его на автомобиль «Car», чтобы сделать его дочерним объектом, игрового объекта «Car».
• Задайте имя объекту «Blob shadow projector»
• Добавить компонент (Projector) проектора на Blob тень этого проектора (Component->Renderer->Projector)
• Установите на проекторах настройки Near Clip Plane = 0,1, Far Clip Plane = 50, Field of View = 30.
• Назначьте материал Blob_shadow для слота материала.
• В «Ignore Layers» выберите «Everything», а затем снимите флажок со слоя «Road», в результате чего проектор отбросит Blob тень на дорогу.
• Добавьте скрипт BlobShadowController.js (в папке Scripts/CSharpScripts в окне проекта)

Положение и вращение компонента (Projector) проектора обновляется каждый кадр в BlobShadowController.js скрипте который является довольно простым. Короче говоря, он находится в 10 метрах над автомобилем и получает его координаты вращения на основе вращения машины. Вы можете взглянуть на скрипт и попытаться изменить значение, если вы хотите что бы Blob тень автомобиля на дороге выглядела иначе.

Следы от шин

Как сделать физику машины в юнити. Смотреть фото Как сделать физику машины в юнити. Смотреть картинку Как сделать физику машины в юнити. Картинка про Как сделать физику машины в юнити. Фото Как сделать физику машины в юнити

Некоторые из вещей, которые делают процесс вождения автомобиля еще более увлекательным, это заносы автомобиля вокруг угла трассы или делать разворот на высокой скорости. Для усиления эффекта колес скользящих по дороге, мы собираемся добавить некоторые следы шин на поверхности, когда автомобиль скользит.

Так мы установим следы шин, если добавим имеющийся скрипт, который контролирует все следы шин в сцене. Этот контроллер отвечает за создание сетки, которая представляет следы шин. Каждое колесо знает свою позицию и будет ли скольжение или нет. Мы используем эту информацию, чтобы зарегистрировать точку в мире, где мы хотим установить отметку заноса (skidmark) по отношению к контроллеру skidmark. Мы позволяем каждому колесу отслеживать предыдущие skidmark точки так, чтобы следы шин от нескольких колес не были перепутаны.

Мы создали prefab, для этого вы можете просто перетащить его на сцену:

• Перетащите Skidmarks prefab из Prefabs->VFX->Skidmarks на сцену.

Мы устанавливаем интенсивность следов от шин, регулируя цвет каждой созданной вершины. Интенсивность определяется тем, насколько силен занос колеса. Для того чтобы создать этот эффект мы используем настроенный шейдер, который использует альфа из каждой вершины при рендеринге тормозных следов. Как и в автомобиле есть несколько вещей, которые могут быть изменены, чтобы сделать следы шин подходящие лучше к машине, которую вы пытаетесь построить.

Максимум следов от шин

Переменная Max Marks определяет количество позиций для следов от шин, которые могут существовать на сцене в любое время. Все колеса, используют те же следы от шин, так что это число рассчитывается на все колеса. При достижении следов от шин максимального количества, первая позиция будет перезаписана. Увеличение этого числа также будет увеличивать суммарную длину всех частей следов от шин в сцене.

Ширина следов от шин

Переменная (Mark Width) определяет ширину следов от шин. Она должна быть отрегулирована, чтобы соответствовать колесам созданного транспортного средства. Если это большой грузовик вы попытаетесь сделать очень широкий skidmark, который нам необходим, и если это «сверхзвуковой автомобиль» с ультра-тонкими шинами, изготовленные для установки рекорда скорости, очень тонкий skidmark будет выглядеть реалистичней.

Наземное смещение

Когда сетка для следов от шин создана, она будет создана с использованием точек, вычисленные из колес для размещения skidmark на дороге. Эти точки чаще всего будут прямыми на поверхности во время сколжения колёс. Когда две сетки оказываются сразу на верхней части друг друга, это может приводить к некоторым мерцанием в игре.

Чтобы предотвратить это, вводится переменная Ground Offset (Наземное смещение). Сетка будет создана и приподнята на всю длину смещения в направлении нормали к поверхности. Так что, если некоторое мерцание существует или следы от шин пересекаются с поверхностью, попробуйте увеличить смещение. Для дальнейшего обеспечения того, чтобы следы от шин оставались на поверхности земли, используются шейдеры для следов от шин, было создано смещение, и было приписана к другой очереди визуализации (Rendering).

Минимальная дистанция

Когда новая точка добавляется в SkidmarkController она должна быть в (Min Distance) минимальном расстоянии от последней точки skidmark (следов от шин). Это гарантирует вам производительное добавление следов от шин на очень небольшие площади. Не устанавливайте это значение слишком большим, хотя это может сделать следы от шин слишком большими, и кроме того, увеличенное расстояние может показаться, будто они отстают от колес т.е. следы от шин появляются за колесами. Уменьшение значения будет в какой-то степени сглаживать следы от шин, создавая иллюзию будто следы от шин «ближе» к колесам.

Текстуры

Текстуры шин для колес от грузовика весьма разные в сравнении с текстурами шин на колесах из формулы-1 (Formula-1). Текстуры для следов от шин (skidmarks) будут создаваться на поверхности. Если вы создали другой тип автомобиля с очень разными колесами, вам нужно будет изменить эту текстуру, если вы хотите, чтобы следы от шин соответствовали колесам.

Добавление звуков

• Добавьте скрипт SoundController.js в игровой объект автомобиль «Car» (Перетащите его из Scripts/JavaScripts/SoundController.js).

Компонент Звукового контроллера (Sound Controller) имеет несколько слотов для аудиофайлов, в которые мы должны назначить разные аудиофайлы. Аудиофайлы находятся в папке Sound/Car в окне проекта (Project view).

Как сделать физику машины в юнити. Смотреть фото Как сделать физику машины в юнити. Смотреть картинку Как сделать физику машины в юнити. Картинка про Как сделать физику машины в юнити. Фото Как сделать физику машины в юнити
Перетащите:

CarEngine_D_upper-register перетащить на слот D. Установите громкость на 0,565.
CarEngine_E_midlow-register перетащить на слот E. Установите громкость на 0.8
CarEngine_F_midhigh-register перетащить на слот F. Установите громкость на 0.78
CarEngine_K_passing-rush перетащить на слот K. Установите громкость на 0.565
CarEngine_L_lower-register перетащить на слот L. Установите громкость на 0.71
Wind-loop_stereo_22khz_16bit перетащить на слот Wind. Установите громкость на 0.8
CarEngine_DEFL_tunnel-add_small перетащить на слот Tunnel Sound. Установите громкость на 0.8
Collision1 перетащить на слот Crash Low Speed Sound. Установите громкость на 0.8
Car_crash1_smaller перетащить на слот Crash High Speed Sound. Установите громкость на 0.5
Car_skid1 перетащить на слот Skid Sound.
CarTutorialSong перетащить на слот Background Music. Установите громкость на 1.

Настройки громкости (volume settings), конечно это только настройки которые мы предлагаем. Вы можете «поиграть» с разными значениями, чтобы получить точный звуковой образ, который вы себе представляете. Или вы могли бы пойти еще дальше и создать своё собственный меню настроек для звука, позволяя настроить громкость музыки и эффектов отдельно в игре.

Завершение и сборка

Наконец перетащите следующие скрипты на игровой объект автомобиль (Car):

LightmapperObjectUV.js из (scripts/JavaScripts)
CrashController.js из (scripts/JavaScripts)
Generate2DReflection.cs из (scripts/CSharpScripts)

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

• Перейдите к Main_Camera (Главная камера) и перетащите ее на игровой объект «Car» (Автомобиль) и направьте камеру так как вам удобно для управления машиной (в рамках компонента скрипта «Car Camera» Автомобильная камера).

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *