Мои Уведомления
Привет, !
Мой Аккаунт Мои Финансы Мои Подписки Мои Настройки Выход
Руководство API скрипты

Руководство по Wheel Collider

Колесо КоллайдерНевидимая форма, используемая для обработки физических столкновений объекта. Коллайдер не обязательно должен быть точно такой же формы, как сетка объекта — грубое приближение часто бывает более эффективным и неразличимым в игровом процессе. Подробнее
Компонент See in Словарь
работает на PhysX 3 Vehicles SDK.

Это руководство проведет вас через процесс создания базовой работающей машины.

Для начала выберите GameObjectОсновной объект в сценах Unity, который может представлять персонажей, реквизит, декорации, камеры, путевые точки. , и более. Функциональность GameObject определяется прикрепленными к нему компонентами. Подробнее
См. в Словарь
> 3D-объектИгровой 3D-объект, такой как куб, ландшафт или тряпичная кукла. Подробнее
См. в разделе Словарь
> Плоскость. Это земля, по которой будет двигаться машина. Для простоты убедитесь, что для земли значение Transform равно 0 (на компоненте Transform в окне Inspector щелкните шестеренку Settings и нажмите Reset). Увеличьте поле Масштаб преобразования до 100, чтобы сделать плоскость больше.

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

  1. Сначала добавьте GameObject, который будет выступать в качестве корневого GameObject автомобиля. Для этого перейдите в GameObject > Создать пустой. Измените имя GameObject на car_root.
  2. Добавить трехмерную физику RigidbodyКомпонент, позволяющий воздействовать на игровой объект смоделированной гравитацией и другими силами. Подробнее
    См. в компоненте Словарь
    car_root. Масса по умолчанию 1 кг слишком мала для настроек подвески по умолчанию; измените его на 1500 кг, чтобы сделать его намного тяжелее.
  3. Далее создайте коллайдер для кузова автомобиля. Выберите GameObject > 3D-объект > Куб. Сделайте этот куб дочерним GameObject в car_root. Сбросьте Transform на 0, чтобы он идеально выровнялся в локальном пространстве. Автомобиль ориентирован по оси Z, поэтому установите Z Scale для Transform на 3.
  4. Добавьте корень колеса. Выберите car_root и GameObject > Создать пустой дочерний элемент. Измените имя на wheels. Сбросьте Transform на нем. Этот GameObject не является обязательным, но он пригодится для последующей настройки и отладки.
  5. Чтобы создать первое колесо, выберите игровой объект wheels, перейдите в GameObject > Создать пустой дочерний элемент и назовите это frontLeft. Сбросьте Transform, затем установите Transform Position X на –1, Y на 0 и Z на 1. . Чтобы добавить коллайдер к колесу, перейдите в раздел Добавить компонент > Физика > Колесный коллайдерСпециальный коллайдер для наземных транспортных средств. Он имеет встроенное обнаружение столкновений, физику колес и модель трения шин на основе проскальзывания. Его можно использовать для объектов, отличных от колес, но он специально разработан для транспортных средств с колесами. Подробнее
    См. в Словарь
    .
  6. Скопируйте frontLeft GameObject. Измените положение X элемента Transform на 1. Измените имя на frontRight.
  7. Выберите оба игровых объекта frontLeft и frontRight. Дублируйте их. Измените положение Z Transform обоих игровых объектов на -1. Измените имена на rearLeft и rearRight соответственно.
  8. Наконец, выберите игровой объект car_root и с помощью инструмента "Перемещение" слегка приподнимите его над землей.

Теперь вы должны увидеть что-то вроде этого:

Чтобы сделать эту машину действительно управляемой, вам нужно написать для нее контроллер. Следующий пример кода работает как контроллер:

using UnityEngine; using System.Collections; using System.Collections.Generic; public class SimpleCarController : MonoBehaviour { public List axleInfos; // the information about each individual axle public float maxMotorTorque; // maximum torque the motor can apply to wheel public float maxSteeringAngle; // maximum steer angle the wheel can have 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; // is this wheel attached to motor? public bool steering; // does this wheel apply steer angle? }

Создайте новый скрипт C# (Добавить компонент > Новый скрипт) в car_root GameObject, скопируйте этот пример в файл сценария и сохраните его. Вы можете настроить параметры скрипта, как показано ниже; поэкспериментируйте с настройками и войдите в режим воспроизведения, чтобы проверить результаты.

Следующие настройки очень эффективны в качестве автомобильного контроллера:

Совет: обязательно увеличьте размер AxleInfo.

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

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

Здесь вам понадобится геометрия колес. Из цилиндра можно сделать простую форму колеса. Может быть несколько подходов к добавлению визуальных колес: сделать так, чтобы вам приходилось назначать визуальные колеса вручную в свойствах скрипта, или написать некоторую логику для автоматического поиска соответствующего визуального колеса. Этот учебник следует второму подходу. Прикрепите визуальные колеса к игровым объектам Wheel Collider.

Далее измените скрипт контроллера:

using UnityEngine; using System.Collections; using System.Collections.Generic; [System.Serializable] public class AxleInfo { public WheelCollider leftWheel; public WheelCollider rightWheel; public bool motor; public bool steering; } public class SimpleCarController : MonoBehaviour { public List axleInfos; public float maxMotorTorque; public float maxSteeringAngle; // finds the corresponding visual wheel // correctly applies the transform 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; } 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; } ApplyLocalPositionToVisuals(axleInfo.leftWheel); ApplyLocalPositionToVisuals(axleInfo.rightWheel); } } }

Одним из важных параметров компонента Wheel Collider является Force App Point Distance. Это расстояние от основания покоящегося колеса до точки приложения колесных сил. Значение по умолчанию равно 0, что означает приложение сил к основанию покоящегося колеса, но на самом деле целесообразно расположить эту точку чуть ниже центра масс автомобиля.

Вы можете отблагодарить автора, за перевод документации на русский язык. ₽ Спасибо
Руководство Unity 2021.3