Поворот с использованием пары Input.GetAxis

Общие вопросы о Unity3D

Поворот с использованием пары Input.GetAxis

Сообщение GrandmaSquid3 20 мар 2017, 23:20

Всем привет! Как правильно сделать поворот объекта с использованием пары Input.GetAxis?

Например, у меня есть объект на направление которого я хочу воздейстовать с помощью Input.GetAxis("Vertical") и Input.GetAxis("Horizontal"). Звучит очень просто, но у меня возникла проблема при одновременном отпускании клавиш Vertical и Horizontal. Вот мой скрипт:

Синтаксис:
Используется csharp
void Update ()
{
        // Ввод
        float forward = Input.GetAxis("Vertical");
        float right = Input.GetAxis("Horizontal");

        // Направление
        Vector3 direction = forward * Vector3.forward + right * Vector3.right;
        if (direction.magnitude > 1.0f)
            direction.Normalize();
        else if (direction == Vector3.zero)
            return;

        // Поворот
        Quaternion rotation = Quaternion.LookRotation(direction, Vector3.up);
        transform.rotation = Quaternion.RotateTowards(transform.rotation, rotation, 10);
}


Когда нажаты обе клавиши, то их значения (forward и right) равны 1. Если одновременно отпустить клавиши, то эти значения начнут уменьшаться, но будут равны друг другу. Но не всегда выходит одновременно отпустить клавиши, поэтому одно из значений начинает уменьшаться раньше, а следовательно меняется значение направления (direction) и объект начинает поворачиваться в одну из сторон, что неприемлемо.

Как правильно выйти из ситуации?
GrandmaSquid3
UNец
 
Сообщения: 12
Зарегистрирован: 15 мар 2017, 00:23

Re: Поворот с использованием пары Input.GetAxis

Сообщение MANMANA 21 мар 2017, 19:46

Ну приравняйте, в частном случае, значение одной переменной (вертикальной) другой переменной (горизонтальной)
_3dbuffer.com
MANMANA
UNIверсал
 
Сообщения: 475
Зарегистрирован: 31 июл 2014, 10:32
Откуда: Moscow
  • Сайт

Re: Поворот с использованием пары Input.GetAxis

Сообщение GrandmaSquid3 22 мар 2017, 09:33

MANMANA писал(а):Ну приравняйте, в частном случае, значение одной переменной (вертикальной) другой переменной (горизонтальной)

И что это такое будет?

Например, есть башня танка. Я хочу чтобы башня разворачивалась вперед/назад (Input.GetAxis("Vertical")), влево/вправо (Input.GetAxis("Horizontal")) и также могла иметь смешанное направление (диагональное), когда используются оба Input.GetAxis. Все работает, башня поворачивается, но проблема возникает если отпустить управление, когда башня была повернута по диагонали.
GrandmaSquid3
UNец
 
Сообщения: 12
Зарегистрирован: 15 мар 2017, 00:23

Re: Поворот с использованием пары Input.GetAxis

Сообщение юnity 22 мар 2017, 13:40

Это же естесственно, когда вы жмёте кнопку вперёд InputGetAxis(verktical) увеличивается, есль отпоустили - уменьшаеться с частотой кадра. Есле вы просто крутите башней советую крутиь InputGetAxis(gorizontal)
Синтаксис:
Используется csharp
transform.rotation.y += Input.GetAxis("Horizontal") * time.deltaTime;
Give exact coordinates of the decision of the problems
Аватара пользователя
юnity
UNITрон
 
Сообщения: 290
Зарегистрирован: 21 июл 2015, 18:30

Re: Поворот с использованием пары Input.GetAxis

Сообщение GrandmaSquid3 22 мар 2017, 19:54

юnity писал(а):Это же естесственно, когда вы жмёте кнопку вперёд InputGetAxis(verktical) увеличивается, есль отпоустили - уменьшаеться с частотой кадра. Есле вы просто крутите башней советую крутиь InputGetAxis(gorizontal)
Синтаксис:
Используется csharp
transform.rotation.y += Input.GetAxis("Horizontal") * time.deltaTime;


Мне нужно управлять поворотом с помощью двух Input.GetAxis, это соответствует стику геймпада.
GrandmaSquid3
UNец
 
Сообщения: 12
Зарегистрирован: 15 мар 2017, 00:23


Вернуться в Общие вопросы

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8