Может ли кто-нибудь сказать мне, почему ось Y onMove является осью Z вектора 3?
это потому, что Input в вашем случае 2D - перемещение влево или вправо считается Ввод оси X (например, кнопки A / D на клавиатуре в играх) и вперед или назад - это ввод оси Y (также как W / S на клавиатуре) - например, если вы нажали клавишу W, ваш ввод будет похож на vector2 (0 , 1) и означает, что значение оси Y равно 1 ... et c. Итак, это был ввод, теперь мы хотим, чтобы сфера двигалась вперед, когда мы нажимаем клавишу W, так как вы работаете в трехмерном пространстве, направление вперед / назад - это ось Z. поэтому нам нужно поместить значение y входа в скорость объекта, чтобы двигаться вперед (ось z), поэтому в приведенном выше примере вход y помещается по оси z, чтобы сфера двигалась вперед / назад.
if ваш код был таким:
Vector3 movement = new Vector3(movementX, movementY ,0.0f );
rb.AddForce(movement);
когда вы нажимаете W, ваша сфера будет летать, а когда вы нажимаете S, ваша сфера будет нырять. И если это так:
Vector3 movement = new Vector3(movementX, 0.0f, movementY );
rb.AddForce(movement);
ваш объект будет двигаться вперед / назад в соответствии с вашим входным значением y и влево / вправо в соответствии с вашим входным значением x.
вместо проверки, если Клавиша W, S или A или D нажимается и определяет движение вправо при нажатии D ... вы просто связываете ввод motionX с перемещением объекта по оси X, а ввод перемещенияY с перемещением объекта по оси Z.
это просто то, чем ты хочешь заниматься. также вы можете настроить свои входы и движения ваших объектов по своему усмотрению.