Назначение:
Система механических аватаров позволяет создать любой вид транспорта на основе имеющихся в Unity стандартных компонентов, благодаря этому элементы системы будут корректным образом взаимодействовать с другими компонентами физической системы Unity. В системе имеются компоненты позволяющие создать механический аватар с большим количеством различных конфигураций. Система поддерживает Built-in, физику, что делает её поведение в отношении других физических объектов предсказуемым и сбалансированным, это позволит построить грамотное взаимодействие с окружением.
В системе присутствует несколько типов компонентов:
Motor представляет собой компонент оказывающий физическое воздействие на объект, к которому он прикреплён. Все моторы наследуются от компонента MotorBasePhysics.
Компонент MotorBasePhysics является родительским объектом каждого мотора и имеет следующую структуру:
public class MotorBasePhysics : MonoBehaviour
{
[SerializeField] protected MotorControl[] controls;
public Dictionary<string, MotorControl> Controls { get; private set; } = new Dictionary<string, MotorControl>();
public string SelectedControl { get; set; }
public void SetValue(float value) {
if (Controls.ContainsKey(SelectedControl))
Controls[SelectedControl].Value = value;
}
...
[System.Serializable]
public class MotorControl {
public string name;
[Range(-1, 1)] public float Value = 0;
}
}
В классе MotorControl находится два поля: name и Value. Этот класс служит элементом словаря и содержит в себе имя оси и её текущее значение. в массиве controls записаны экземпляры MotorControl, которые хранят имена осей и их значения, свойство SelectedControl служит для выбора имени оси напрямую из инспектора, метод SetValue - для установки значения. таким образом данный компонент имеет возможность манипулировать своими осями, как под управлением контроллеров, так и из инспектора.
От компонента MotorBasePhysics наследуются следующие моторы: MotorDragPhysics, MotorJetPhysics, MotorLinearPhysics, MotorMagnetPhysics, MotorWheelPhysics.
MotorDragPhysics предназначен для динамического изменения параметров трения объекта при его перемещении в пространстве, он нужен для того, чтобы эмулировать реалистичное поведение объектов в воздухе, эмулировать “тяжесть” объектов и сопротивление воздуха.
MotorDragPhysics - мотор ответственный за динамическое изменение Drag и AngularDrag физического тела. Компонент MotorDragPhysics управляет физическими параметрами тела при помощи полей представленных ниже:
[SerializeField] private AnimationCurve dragCurve;
[SerializeField] private AnimationCurve angularDragCurve;
[SerializeField] private float dragCoeff;
[SerializeField] private float angularDragCoeff;