Джойстик вводит только объект по диагонали
У меня проблема с использованием единственного скрипта джойстика в Unity.
Я использую приведенный ниже скрипт для перемещения вертолета через жесткое тело. Когда я тестирую игру в единстве с клавишами со стрелками, все работает отлично, как и ожидалось. Однако, если я проверю это на телефоне, вертолет перемещается только по диагонали от нижнего левого к верхнему правому углу.
Я уверен, что это связано с тем, как я прикрепляю джойстик к оси X и Y, но я не могу обнаружить свою ошибку... Кто-нибудь может взглянуть на это свежим взглядом и сказать мне, где я облажался?
#pragma strict
var speed : float = 500.0;
var smooth : float = 2.0;
var gravity : float = 0.0;
var moveJoystick : Joystick;
function FixedUpdate () {
var horPos = Input.GetAxis ("Horizontal") ?
Input.GetAxis ("Horizontal") : joyStickInput(moveJoystick);
var verPos = Input.GetAxis ("Vertical") ?
Input.GetAxis ("Vertical") : joyStickInput(moveJoystick);
var movedirection = new Vector3(horPos, 0, verPos);
if (movedirection != Vector3.zero){
var newRotation = Quaternion.LookRotation(movedirection * -1);
transform.rotation = Quaternion.Slerp(transform.rotation, newRotation, Time.deltaTime * smooth);
}
rigidbody.AddForce (movedirection * speed * Time.deltaTime);
}
function joyStickInput (joystick : Joystick) {
var absJoyPos = Vector2 (Mathf.Abs(joystick.position.x),
Mathf.Abs(joystick.position.y));
var xDirection = (joystick.position.x > 0) ? 1 : -1;
var yDirection = (joystick.position.y > 0) ? 1 : -1;
return ( ( absJoyPos.x > absJoyPos.y) ? absJoyPos.x * xDirection : absJoyPos.y * yDirection);
}
1 ответ
Потому что horPos и verPos используют один и тот же joyStickInput(moveJoystick)?
Когда вы нажмете правую кнопку, ваш joyStickInput() вернет 1, установив одинаковые значения horPos и verPos (1), и ваш спрайт будет двигаться вверх (y+1) вправо (x+1)