Вы уверены, что это также не происходит в обратном направлении?Я думаю, что это может быть связано с тем, как Годо обрабатывает арифметический порядок.Например, если Godot выполняет умножение перед делением (как я думаю, что это происходит), то, если мы используем целые значения (1 или -1), то Godot обработает первую координату Vector3 в вашем коде следующим образом: *
Using - (MoveDirection.x - (MoveDirection.z / 2 * MoveDirection.x)
Substitute values for - (x,z)
FOR VALUES (1 , -1)
(1) - (-1 / (2 * 1))
(1) - (-1) / (2)
(1) - (-0.5)
= 1.5 <<<<<<----------- THIS IS YOUR PROBLEM (I THINK)
FOR VALUES (-1, 1)
(-1) - (1 / (2 * -1))
(-1) - (1) / (-2)
(-1) - (-0.5)
= -0.5
FOR VALUES (1 , 1)
(1) - (1 / (2 * 1))
(1) - (1) / (2)
(1) - (0.5)
= 0.5
FOR VALUES (-1, -1)
(-1) - (-1 / (2 * -1))
(-1) - (-1) / (-2)
(-1) - (0.5)
= -1.5 <<<<<<----------- THIS SHOULD ALSO BE A PROBLEM (I THINK)
Если моя математика неверна, пожалуйста, прости меня, сейчас 5:00 утра, где я нахожусь.Если я ошибаюсь, дайте мне знать, и я удалю этот ответ.
РЕДАКТИРОВАТЬ: Оказывается, арифметический порядок не имеет значения, он делает то же самое с делением в первую очередь.Моим предложением было бы найти способ вычесть 1 из (или добавить 1 к) затронутых результатов.Может быть что-то вроде: if (MoveDirection.x > 0) AND (MoveDirection.z < 0)
, вычтите 1 из результата.