Size: a a a

2020 May 06

M

Mcc in unity3d.ru
а pressedkeys когда обнуляется?
источник

А

Александр in unity3d.ru
Mcc
а pressedkeys когда обнуляется?
мне кажется что дело не в нём, вроде с ним всё корректно. Но вообще это стек, из него извлекаются значения через метод pop в тот же кадр, если он не пустой.
источник

АК

Ал Кипленд in unity3d.ru
Александр
ну теперь стало как если было бы if else, всё, что ниже W обрабатывается, а выше - нет.
Выше W на твоём скриншоте ничего нет.
источник

А

Александр in unity3d.ru
Ал Кипленд
Выше W на твоём скриншоте ничего нет.
это абстракция. Вместо W может быть A или D или S.
источник

M

Mcc in unity3d.ru
Александр
мне кажется что дело не в нём, вроде с ним всё корректно. Но вообще это стек, из него извлекаются значения через метод pop в тот же кадр, если он не пустой.
ну тогда в конце лог вывести что попало туда а что нет, если ретурны убрать зажать 4 клавиши то в логе все 4 и будут, просто непонятно когда он очищается
источник

АК

Ал Кипленд in unity3d.ru
Зачем ты вообще используешь стек для хранения нажатых кнопок?

int ox = 0, oy = 0;

if (Input.GetKey(KeyCode.W))
 oy += 1;
if (Input.GetKey(KeyCode.S))
 oy -= 1;
if (Input.GetKey(KeyCode.D))
 ox += 1;
if (Input.GetKey(KeyCode.A))
 ox -= 1;
источник

M

Mcc in unity3d.ru
про pop не прочитал) сорри , тогда лог добавьте напишите что получилось
источник

M

Mcc in unity3d.ru
Ал Кипленд
Зачем ты вообще используешь стек для хранения нажатых кнопок?

int ox = 0, oy = 0;

if (Input.GetKey(KeyCode.W))
 oy += 1;
if (Input.GetKey(KeyCode.S))
 oy -= 1;
if (Input.GetKey(KeyCode.D))
 ox += 1;
if (Input.GetKey(KeyCode.A))
 ox -= 1;
он наверно весь инпут пересылает
источник

А

Александр in unity3d.ru
Ал Кипленд
Зачем ты вообще используешь стек для хранения нажатых кнопок?

int ox = 0, oy = 0;

if (Input.GetKey(KeyCode.W))
 oy += 1;
if (Input.GetKey(KeyCode.S))
 oy -= 1;
if (Input.GetKey(KeyCode.D))
 ox += 1;
if (Input.GetKey(KeyCode.A))
 ox -= 1;
чтобы отследить последнее нажатие.
источник

G

Graf in unity3d.ru
Похоже на неудачную реализацию паттерна Command
источник

А

Александр in unity3d.ru
Ал Кипленд
Зачем ты вообще используешь стек для хранения нажатых кнопок?

int ox = 0, oy = 0;

if (Input.GetKey(KeyCode.W))
 oy += 1;
if (Input.GetKey(KeyCode.S))
 oy -= 1;
if (Input.GetKey(KeyCode.D))
 ox += 1;
if (Input.GetKey(KeyCode.A))
 ox -= 1;
в таком случае если я зажму клавишу W и D то у меня вектор будет (1,1) и объект будет двигаться по диагонали, а мне нужно чтобы он двигался в ту сторону, клавиша которая была нажата последней
источник

А

Александр in unity3d.ru
если я эту клавишу отпущу, то он будет двигаться в ту, которая до сих пор зажата
источник

M

Mcc in unity3d.ru
Александр
чтобы отследить последнее нажатие.
клавиши либо нажаты либо нет
источник

А

Александр in unity3d.ru
https://www.retrogames.cz/play_014-NES.php
вот тут прям лучшее объяснение что я хочу.
Зажмите стрелку влево, не отпуская её другую стрелку и посмотрите на поведение танка. А потом отпустите эту стрелку.
источник

G

Graf in unity3d.ru
Александр
если я эту клавишу отпущу, то он будет двигаться в ту, которая до сих пор зажата
Может проблема в самой логике?
источник

M

Mcc in unity3d.ru
Александр
если я эту клавишу отпущу, то он будет двигаться в ту, которая до сих пор зажата
просто добавьте таймкод на зажатие, можно счетчик который инкрементится для каждой зажатой клавиши, соотвественно самый раний счетчик и есть ваше направление
источник

А

Александр in unity3d.ru
Graf
Может проблема в самой логике?
ну вот что-то в проверке нажатий, наверное и не так. Ибо оно от части работает как нужно, но только если использовать определенные клавиши. То есть, зажать W, а потом S - он поедет вниз.
А если зажать D, а потом W, то он будет так же ехать в направлении D
источник

АК

Ал Кипленд in unity3d.ru
Александр
в таком случае если я зажму клавишу W и D то у меня вектор будет (1,1) и объект будет двигаться по диагонали, а мне нужно чтобы он двигался в ту сторону, клавиша которая была нажата последней
То есть тебе нужна првоерка, что клавиша была нажата на этой итерации апдейта, но не была нажата на предыдущей.
источник

АК

Ал Кипленд in unity3d.ru
Для этого есть готовое решение - Input.GetKeyDown
источник

АК

Ал Кипленд in unity3d.ru
Он возвращает true, если пользователь на этом кадре нажал кнопку.
источник