Назначение:

  1. Реализация механического аватара различного типа и назначения, простой системы кастомизации и управления механическим аватаром.
  2. Удобная настройка различных типов двигателей таких, линейный, вращательный, колёсный и двигатель летающего транспорта.
  3. Сборка/модификация транспорта и его поведения из компонентов системы.
  4. Расширение системы путём добавления пользовательских компонентов.

Описание:

Система механических аватаров позволяет создать любой вид транспорта на основе имеющихся в Unity стандартных компонентов, благодаря этому элементы системы будут корректным образом взаимодействовать с другими компонентами физической системы Unity. В системе имеются компоненты позволяющие создать механический аватар с большим количеством различных конфигураций. Система поддерживает Built-in, физику, что делает её поведение в отношении других физических объектов предсказуемым и сбалансированным, это позволит построить грамотное взаимодействие с окружением.

В системе присутствует несколько типов компонентов:

Motors

Motor представляет собой компонент оказывающий физическое воздействие на объект, к которому он прикреплён. Все моторы наследуются от компонента MotorBasePhysics.

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 предназначен для динамического изменения параметров трения объекта при его перемещении в пространстве, он нужен для того, чтобы эмулировать реалистичное поведение объектов в воздухе, эмулировать “тяжесть” объектов и сопротивление воздуха.

MotorDragPhysics - мотор ответственный за динамическое изменение Drag и AngularDrag физического тела. Компонент MotorDragPhysics управляет физическими параметрами тела при помощи полей представленных ниже:

[SerializeField] private AnimationCurve dragCurve; 
[SerializeField] private AnimationCurve angularDragCurve; 
[SerializeField] private float dragCoeff; 
[SerializeField] private float angularDragCoeff;