2015-04-18 8 views
0

Я некоторое время застрял на этом, и я был бы признателен вам за вашу помощь.Имитировать кнопки клавиатуры, чтобы использовать Input.GetAxis («Горизонтально»)

Мне нужно перенести игру на мобильные устройства, и в результате мне нужно изменить схему управления, чтобы принимать во внимание краны.

Я хочу продолжать использовать Input.GetAxis («Горизонтальный»), так как игра была построена и сбалансирована вокруг него и просто имитирует нажатие левой/правой клавиши всякий раз, когда игрок нажимает на левую/правую сторону экрана.

Это возможно любым способом?

OnUpdate:

touchMove() 
playerPosition.x += Input.GetAxis ("Horizontal") * playerVelocity; 
transform.position = playerPosition; 

Чтобы проверить краны

private void touchMove() 
    { 
     if (Input.touchCount > 0) 
     { 
      Touch touch = Input.GetTouch(0); 

      if (touch.position.x < Screen.width/2) 
      { 
       //simulate a left keyboard push 
      } 
      else if (touch.position.x > Screen.width/2) 
      { 
        //simulate a left keyboard push 
      } 
     } 
    } 
+0

Вы пытаетесь создать свое собственное значение, зависит от того, насколько далеко от среднего экрана вашего прикосновения, и умножить его зависит от того, насколько далеко? – Aizen

+0

Я пытаюсь просто вызвать Input.GetAxis («Горизонтальный») (или подобный метод) всякий раз, когда пользователь удаляет левый/правый экран. GetAxis отлично работает для меня, поскольку он имеет сглаживание, прикрепленное к нему. – r3x

ответ

0

В конце концов, я просто добавил усилие, чтобы имитировать движение и сопротивление, чтобы имитировать decceleration. Это очень хорошая альтернатива getAxis.

Мне нужно еще немного настроить мой код, но это должно хорошо работать как для клавиатуры, так и для сенсорных входов.

1

После некоторых исследований, кажется, что это не возможно, чтобы иметь сценарий, который устанавливал значения Input.

В качестве замены вы можете использовать свою собственную среднюю функцию, которая учитывает все, что вы хотите.

Пример:

private int GetAxisHorizontal() 
{ 
    // Get whatever should return your axis value 
    if(Input.touches > 0) {... return value;} 
    else return Input.GetAxis("Horizontal"); 
} 

И вы можете использовать его, как вашу нормальную функцию:

playerPosition.x += GetAxisHorizontal() * playerVelocity; 
+0

Да, я согласен с тем, что имитировать входные данные не является тривиальным. См. Мой ответ ниже для того, что я сделал, чтобы решить эту проблему. Спасибо за ответ :) – r3x

0

Я сделал то, что сделал r3x, и this - это мой скрипт игрока. Он имеет элементы управления Mobile и Keyboard, а также встроенные функции множественных привязок (изменение KeyBindings класс).

http://pastebin.com/VGtnSP6f

(код вещь еще любопытное багги)

EDIT: Просто хочу отметить, что многое из этого сценария является получение ключей/положение мыши и лерп-ки это сделать ее гладкой. Сделайте / 40f Нижнее, чтобы увеличить сглаживание.

Смежные вопросы