Разрабатывал несколько режимов управления для транспортного средства. Суть управления в том, чтобы вращать тело по трём осям. В первом режиме вращение не ограниченно, просто указал всем трём осям Space.World и проблем не возникло.
Первый режим управления. Всё работает как надо. ( Var a, Var b, Var c просто числа связанные с осями управления (Input Axis)).
Синтаксис:
Используется csharp
transform.Rotate(c * transform.right * RollSensitivity, Space.World);
transform.Rotate(b * transform.up * YawSensitivity, Space.World);
transform.Rotate(a * transform.forward * PitchSensitivity, Space.World);
transform.Rotate(b * transform.up * YawSensitivity, Space.World);
transform.Rotate(a * transform.forward * PitchSensitivity, Space.World);
Однако во втором режиме углы наклона транспортного средства ограниченны в осях X и Z. Человек с этого форума подсказал, что подобное ограничение можно сделать через углы Эйлера (eulerAngles). Проблема заключается в том, что наклоны в одних осях происходят независимо от наклонов в других осях.
Второй режим управления. Проблема с локальной системой угловых координат. ( Var a, Var b, Var c просто числа связанные с осями управления (Input Axis)).
Синтаксис:
Используется csharp
// Неограниченная ось вращения Y.
transform.Rotate(b * transform.up * YawSensitivity * 0.2f, Space.World);
// Ограниченные оси вращения X и Z.
var ea = RigBody.transform.eulerAngles;
ea.x = c * 230f; // Ось X.
ea.z = a * 230f; // Ось Z.
RigBody.transform.eulerAngles = ea;
transform.Rotate(b * transform.up * YawSensitivity * 0.2f, Space.World);
// Ограниченные оси вращения X и Z.
var ea = RigBody.transform.eulerAngles;
ea.x = c * 230f; // Ось X.
ea.z = a * 230f; // Ось Z.
RigBody.transform.eulerAngles = ea;
Есть предположение, что исправить положение можно приписав подобие Space.World к осям X и Z (Как именно это сделать я не знаю).
Пробовал менять eulerAngles на localEulerAngles и, честно говоря, разницы вообще не увидел.
Главная задача: связать оси второго режима управления в одну локальную систему. Управление получится такое же как в первом режиме, но с ограниченными углами наклона в осях X и Z.
Также прикрепляю видео, где, по моему мнению, наглядно демонстрируется результат, которого пытаюсь добиться я. (На видео оси X и Z не ограниченны, однако само вращение абсолютно правильное).
Таймкод: 1.22
(В первом режиме управления движения в точности такие же, как и на видео)
Искренне буду благодарен за любую помощь.