Я уже некоторое время пытаюсь с разными уроками получить хорошую систему управления космическим кораблем от первого лица (вид из кабины). Я пытался использовать только мышь, только клавиатуру и комбинации, но я продолжаю сталкиваться с одной и той же проблемой во всех уроках. даже эта простая строка кода делает это:
transform.position += transform.forward * Time.deltaTime * 90f;
transform.Rotate( Input.GetAxis("Vertical"), Input.GetAxis("Horizontal"), 0.0f);
Проблема, которую я продолжаю получать, состоит в том, что, если я передам это хорошо. это я рыскать это нормально. Но если я сделаю и то, и другое (то есть я go по диагонали), он также вращает мой корабль по оси Z и портит мою ориентацию. Я попытался заблокировать вращение z в жестком теле, но это тоже не помогает. Я пытался создавать код, чередуя его с применением крутящего момента и простого вращения, следуя некоторым учебникам, включая этот: Учебное пособие , но продолжаю сталкиваться с проблемой вращения.
Я хочу создать игру, которая контролирует как в старой игре Хелбендер
Кто-нибудь из вас знает, как я могу заставить работать элементы управления космическим кораблем?
---- РЕДАКТИРОВАТЬ -----
Теперь немного дальше. Он больше не поворачивает мою ось z, потому что я продолжаю устанавливать его на 0. Единственная проблема сейчас заключается в том, что если я пытаюсь сделать зацикливание, корабль переворачивается, а не зацикливается.
if (Input.GetKey("up"))
{
transform.Rotate(transform.right * -ShipPanSpeed * Time.deltaTime, Space.World);
}
if (Input.GetKey("down"))
{
transform.Rotate(transform.right * ShipPanSpeed * Time.deltaTime, Space.World);
}
if (Input.GetKey("left"))
{
transform.Rotate(transform.up * -ShipPanSpeed * Time.deltaTime,Space.World);
}
if (Input.GetKey("right"))
{
transform.Rotate(transform.up * ShipPanSpeed * Time.deltaTime,Space.World);
}
float z = transform.eulerAngles.z;
transform.Rotate(0, 0, -z);