Загрузил Заряд

ЛР 6 fixed

реклама
Лабораторная работа 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. Украсьте игровой уровень различными объектами (препятствиями,
бордюрами, отбойниками и т.п.)
Скачать