Лабораторная работа 4. Добавление автомобиля в Unity Создание простого автомобиля в Unity. 1. Итак создадим четыре пустых объекта для удобной иерархии в нашем объекте: carRoot – контейнер для всех элементов машины (геометрия, свет, камеры, объекты для скриптов) car – контейнер для объектов именно машины, physic – контейнер для физических моделей колес, graphic – графические объекты. 2. Добавим в carRoot камеру. 3. В car добавляем компонент RigidBody, его масса – это масса корпуса машины, она будет влиять на устойчивость и на то, насколько сильно он прижимает колеса. Для того чтобы на поворотах нас не сильно заносило, и при падении машина возвращалась в правильное положение, а не переворачивалась, нам потребуется два изменения – компонент ConstantForce в car, который будет прижимать машину на поворотах, кроме того, переместим центр массы машины вниз, добавив на нее скрипт carControl с кодом вроде этого: gameObject.GetComponent(Rigidbody).centerOfMass = Vector3 (0, высота_машинки*масштаб, 0); 4. В physic создаем пустой объект body с компонентом CapsuleCollider – это будет простой корпус машины, обтекаемый и не дающий застревать в стенках. 5. создаем пустой объект wheel_BL и добавляем ему компонент WheelCollider, и настраиваем его: Center – расположение колеса, Radius – радиус колеса, Suspension Distance – длинна пружин подвески. Suspension Spring : Spring – сила пружины подвески, чем выше тем сильнее пружинит, Suspension Spring : Damper – сила амортизатора, делает более плавным движение пружины. Mass – масса колес, опять же влияет на поведение на заносах, прыжках. Теперь добавим в объект wheel_BL простой цилиндрический меш, чтобы так сказать, иметь отладочную версию, впрочем, можно ограничится тем, что Unity нам и так предоставляет. 6. Клонируем наше колесо до нужного числа, например, 4 – в принципе, машинка уже готова. Теперь нам нужно только заставить колеса вращаться с ускорением по нажатию клавиш и поворачиваться, что можно сделать например так: using System.Collections; using System.Collections.Generic; using UnityEngine; public class NewBehaviourScript1 : MonoBehaviour { public GameObject WheelRight; public GameObject WheelLeft; public bool BackWheels; public bool BackFront; public float WheelSpeed; public float WheelRpmMax; private float WheelRotateAngle = 20f; private WheelCollider WheelRightCollider; private WheelCollider WheelLeftCollider; void Start() { gameObject.GetComponent<Rigidbody>().centerOfMass = new Vector3(0f, -0.6f * 2.3f, 0f); WheelRightCollider = WheelRight.GetComponent<WheelCollider>(); WheelLeftCollider = WheelLeft.GetComponent<WheelCollider>(); } void Update() { if (Input.GetKeyDown(KeyCode.W)) { WheelRightCollider.motorTorque = WheelSpeed; WheelLeftCollider.motorTorque = WheelSpeed; } if (Input.GetKeyUp(KeyCode.W)) { WheelRightCollider.motorTorque = 0; WheelLeftCollider.motorTorque = 0; } if (Input.GetKeyDown(KeyCode.S)) { WheelRightCollider.motorTorque = -WheelSpeed; WheelLeftCollider.motorTorque = -WheelSpeed; } if (Input.GetKeyUp(KeyCode.S)) { WheelRightCollider.motorTorque = 0; WheelLeftCollider.motorTorque = 0; } if (Input.GetKeyDown(KeyCode.A)) { if (BackWheels) { WheelRightCollider.steerAngle = -WheelRotateAngle; WheelLeftCollider.steerAngle = -WheelRotateAngle; } else { WheelRightCollider.steerAngle = WheelRotateAngle; WheelLeftCollider.steerAngle = WheelRotateAngle; } } if (Input.GetKeyUp(KeyCode.A)) { WheelRightCollider.steerAngle = 0; WheelLeftCollider.steerAngle = 0; } if (Input.GetKeyDown(KeyCode.D)) { if (BackWheels) { WheelRightCollider.steerAngle = WheelRotateAngle; WheelLeftCollider.steerAngle = WheelRotateAngle; } else { WheelRightCollider.steerAngle = -WheelRotateAngle; WheelLeftCollider.steerAngle = -WheelRotateAngle; } } if (Input.GetKeyUp(KeyCode.D)) { WheelRightCollider.steerAngle = 0; WheelLeftCollider.steerAngle = 0; } } } Порядок выполнения работы: 1. Установите из Asset Store ассет Vehicle Tools: 2. Изучите реализацию физики автомобиля в ассете. Задание 1. Модифицируйте предыдущую лабораторную работу добавив в нее автомобиль. 2. Украсьте игровой уровень различными объектами (препятствиями, бордюрами, отбойниками и т.п.)