Форум программистов, компьютерный форум, киберфорум
Unity, Unity3D
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/40: Рейтинг темы: голосов - 40, средняя оценка - 4.78
0 / 0 / 0
Регистрация: 16.06.2019
Сообщений: 28

Как эмулировать нажатие клавиши на клавиатуре при нажатии на кнопку UI в Unity

01.08.2019, 17:05. Показов 8294. Ответов 4

Студворк — интернет-сервис помощи студентам
Здравствуйте, есть проблема, скачал из готовых ассетов управление для 2d персонажа, но управление на клавиатуре, т.к делаю игру под андроид, нужно, что бы при нажатии на UI кнопку эмулировалась допустим кнопка Space, перерыл весь интернет, везде не та информация которая нужна мне. Если можно, пожалуйста напишите метод полегче, ибо в c# я пока что чайник.
Вот код (если он конечно нужен):
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
      bool isKeyDownJump = Input.GetButton("Jump");
      float inputAxisX = Input.GetAxisRaw("Horizontal");
      bool isKeyDownLeft = inputAxisX < -0.5f;
      bool isKeyDownRight = inputAxisX > 0.5f;
 
      //-----------------
      //JUMPING LOGIC:
      //player is on ground
      if (isPlayerInAir == false) {
        //in case the player is on ground and does not press the jump key, he
        //should be allowed to jump
        if (isKeyDownJump == false) {
          keyJumpRetrigger = true;
        }
 
        //did player press down the jump button?
        if (isKeyDownJump == true && keyJumpRetrigger == true) {
          keyJumpPressed = true;
          keyJumpRetrigger = false;
 
          //when pressing jump on ground we set the upwards velocity directly
          currentVelocity = new Vector2(currentVelocity.x, PhysicsParams.jumpUpVel);
        }
      } else if (isPlayerOnWall == true) {
        //let's allow jumping again in case of being on the wall
        if (isKeyDownJump == false) {
          keyJumpRetrigger = true;
        }
        if (currentVelocity.y < 0) {//apply friction when moving downwards
          SimAddForce(new Vector2(0, PhysicsParams.wallFriction) * EntityMass);
        }
        if (currentVelocity.y < PhysicsParams.wallFrictionStrongVelThreshold) {//apply even more friction when moving downwards fast
          SimAddForce(new Vector2(0, PhysicsParams.wallFrictionStrong) * EntityMass);
        }
        if (isKeyDownJump == true && keyJumpRetrigger == true) {
          keyJumpPressed = true;
          keyJumpRetrigger = false;
 
          //in case we are moving down -> let's set the velocity directly
          //in case we are moving up -> sum up velocity
          if (IsOnWallLeft == true) {
            if (currentVelocity.y <= 0) {
              currentVelocity = new Vector2(PhysicsParams.jumpWallVelHorizontal, PhysicsParams.jumpWallVelVertical);
            } else {
              currentVelocity = new Vector2(PhysicsParams.jumpWallVelHorizontal, currentVelocity.y + PhysicsParams.jumpWallVelVertical);
            }
          } else if (IsOnWallRight == true) {
            if (currentVelocity.y <= 0)
              currentVelocity = new Vector2(-PhysicsParams.jumpWallVelHorizontal, PhysicsParams.jumpWallVelVertical);
            else
              currentVelocity = new Vector2(-PhysicsParams.jumpWallVelHorizontal, currentVelocity.y + PhysicsParams.jumpWallVelVertical);
          }
        }
      }
      //did player lift the jump button?
      if (isKeyDownJump == false) {
        keyJumpPressed = false;
      }
 
      //let's apply force in case we are holding the jump key during a jump.
      if (keyJumpPressed == true) {
        SimAddForce(new Vector2(0, PhysicsParams.jumpUpForce) * EntityMass);
      }
      //however let's stop doing that as soon as we fall down after the up-phase.
      if (keyJumpPressed == true && currentVelocity.y <= 0) {
        keyJumpPressed = false;
      }
 
      //let's apply additional gravity in case we're in air moving up but not holding the jump button
      if (keyJumpPressed == false && isPlayerInAir == true && currentVelocity.y > 0) {
        SimAddForce(new Vector2(0, PhysicsParams.jumpGravity) * EntityMass);
      }
 
      //-----------------
      //IN AIR SIDEWAYS:
      if (isPlayerInAir == true) {
        //steering into moving direction (slow accel)
        if (isKeyDownLeft == true && currentVelocity.x <= 0)
          SimAddForce(new Vector2(-PhysicsParams.inAirMoveHorizontalForce, 0) * EntityMass);
        else if (isKeyDownRight == true && currentVelocity.x >= 0)
          SimAddForce(new Vector2(PhysicsParams.inAirMoveHorizontalForce, 0) * EntityMass);
        //steering against moving direction (fast reverse accel)
        else if (isKeyDownLeft == true && currentVelocity.x >= 0)
          SimAddForce(new Vector2(-PhysicsParams.inAirMoveHorizontalForceReverse, 0) * EntityMass);
        else if (isKeyDownRight == true && currentVelocity.x <= 0)
          SimAddForce(new Vector2(PhysicsParams.inAirMoveHorizontalForceReverse, 0) * EntityMass);
      }
 
      //-----------------
      //ON GROUND SIDEWAYS:
      if (isPlayerInAir == false) {
        //steering into moving direction (slow accel)
        if (isKeyDownLeft == true && currentVelocity.x <= 0)
          SimAddForce(new Vector2(-PhysicsParams.onGroundMoveHorizontalForce, 0) * EntityMass);
        else if (isKeyDownRight == true && currentVelocity.x >= 0)
          SimAddForce(new Vector2(PhysicsParams.onGroundMoveHorizontalForce, 0) * EntityMass);
        //steering against moving direction (fast reverse accel)
        else if (isKeyDownLeft == true && currentVelocity.x >= 0)
          SimAddForce(new Vector2(-PhysicsParams.onGroundMoveHorizontalForceReverse, 0) * EntityMass);
        else if (isKeyDownRight == true && currentVelocity.x <= 0)
          SimAddForce(new Vector2(PhysicsParams.onGroundMoveHorizontalForceReverse, 0) * EntityMass);
        //not steering -> brake due to friction.
        else if (isKeyDownLeft != true && isKeyDownRight != true && currentVelocity.x > 0)
          SimAddForce(new Vector2(-PhysicsParams.groundFriction, 0) * EntityMass);
        else if (isKeyDownLeft != true && isKeyDownRight != true && currentVelocity.x < 0)
          SimAddForce(new Vector2(PhysicsParams.groundFriction, 0) * EntityMass);
 
        //in case the velocity is close to 0 and no keys are pressed we should make the the player stop.
        //to do this let's first undo the prior friction force, and then set the velocity to 0.
        if (isKeyDownLeft != true && isKeyDownRight != true && currentVelocity.x > 0 && currentVelocity.x < PhysicsParams.groundFrictionEpsilon) {
          SimAddForce(new Vector2(PhysicsParams.groundFriction, 0) * EntityMass);
          currentVelocity.x = 0;
        } else if (isKeyDownLeft != true && isKeyDownRight != true && currentVelocity.x < 0 && currentVelocity.x > -PhysicsParams.groundFrictionEpsilon) {
          SimAddForce(new Vector2(-PhysicsParams.groundFriction, 0) * EntityMass);
          currentVelocity.x = 0;
        }
      }
    }
 
    public void ResetVelocity() {
      currentVelocity = Vector2.zero;
    }
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
01.08.2019, 17:05
Ответы с готовыми решениями:

При нажатии заданной клавиши эмулировать нажатие сочетания клавиш
Ребят, посоветуйте гайд, о том как создать биндер клавиш на delphi, что бы при нажатии одной клавиши например f2, происходило виртуальное...

Нажатие на кнопку при нажатии клавиши Enter
Нужно чтобы после нажатия конпки ентер срабатывала кнопка допустим с id=&quot;but&quot;,если фокус стоит на другом елементе.

QPushButton - отключить нажатие на кнопку при нажатии клавиши
Добрый день! У меня есть программа которая определяет какую кнопку нажали. На обычные кнопки все хорошо работает... Но например нажимаю...

4
 Аватар для SergeyIT
13 / 8 / 5
Регистрация: 28.07.2018
Сообщений: 18
01.08.2019, 22:04
Если Вы не хотите менять скрипт, то можете просто его перестроить под обычные методы и дать их кнопкам.
https://youtu.be/xZdCKgp-xd4
Вот тут можно посмотреть другой скрипт передвижения для UI.
0
 Аватар для 1max1
3362 / 1775 / 1028
Регистрация: 26.10.2018
Сообщений: 5,204
01.08.2019, 22:50
Просто навесить скрипт на кнопку с прыжком, просто ведь.
0
0 / 0 / 0
Регистрация: 16.06.2019
Сообщений: 28
01.08.2019, 23:59  [ТС]
Я бы так и сделал, но я выложил сюда не полный скрипт, эта часть работает с другой частью, а там уже движение влево, вправо, по этому не вариант

Добавлено через 34 минуты
SergeyIT Я именно по этому уроку и делал всё, но у этого скрипта есть много проблем и + нет физики как таковой, я точно знаю, что есть способ именно эмулировать нажатие кнопки на клавиатуре или хотя бы вызвать метод "Jump" и "Horizontal" Через UI кнопки
0
 Аватар для Cr0c
753 / 600 / 204
Регистрация: 06.08.2015
Сообщений: 2,432
03.08.2019, 12:48
PhantomPRO, зачем эмулировать, если есть доступ к коду?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
03.08.2019, 12:48
Помогаю со студенческими работами здесь

Как эмулировать нажатие клавиши ? (0)
Subj

Как закрыть форму при нажатии любой клавиши на клавиатуре
Помогите пожалуйста..Как закрыть форму при нажатии любой клавиши на клавиатуре?

Эмулировать нажатие Enter при нажатии кнопки
Доброго времени суток! Мне нужно что бы по нажатию кнопки на форме програма думала,что была нажата клавиша энтер. как это сделать?

Как можно эмулировать нажатие клавиши Enter
В библиотеке inputsimulator есть все клавиши кроме кроме клавиши Enter , как ее возможно эмулировать?

Как эмулировать нажатие на кнопку?
Добрый день. Есть простая игра. На экране 10 кнопок (карт). При нажатии на кнопку она открывается. Простое условие: первую карту...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru