Input.GetAxis
Благодарим вас за то, что вы помогаете нам улучшить качество документации по Unity. Однако, мы не можем принять любой перевод. Мы проверяем каждый предложенный вами вариант перевода и принимаем его только если он соответствует оригиналу.
Ошибка внесения изменений
По определённым причинам предложенный вами перевод не может быть принят. Пожалуйста попробуйте снова через пару минут. И выражаем вам свою благодарность за то, что вы уделяете время, чтобы улучшить документацию по Unity.
Ваше имя Адрес вашей электронной почты Предложение * Разместить предложенное
public static function GetAxis ( axisName : string): float;
public static float GetAxis (string axisName );
Параметры
Описание
Возвращает значение по axisName виртуальной оси.
Для ввода с клавиатуры или джойстика значение будет лежать в диапазоне -1. 1. If the axis is setup to be delta mouse movement, the mouse delta is multiplied by the axis sensitivity and the range is not -1. 1.
Это не зависит от частоты кадров. При использовании данного значения нет необходимости беспокоиться об изменении частоты кадров.
// A very simplistic car driving on the x-z plane.
var speed : float = 10.0; var rotationSpeed : float = 100.0;
function Update () < // Get the horizontal and vertical axis. // By default they are mapped to the arrow keys. // The value is in the range -1 to 1 var translation : float = Input.GetAxis ("Vertical") * speed; var rotation : float = Input.GetAxis ("Horizontal") * rotationSpeed; // Make it move 10 meters per second instead of 10 meters per frame. translation *= Time.deltaTime; rotation *= Time.deltaTime; // Move translation along the object's z-axis transform.Translate (0, 0, translation); // Rotate around our y-axis transform.Rotate (0, rotation, 0); >
using UnityEngine; using System.Collections;
public class ExampleClass : MonoBehaviour < public float speed = 10.0F; public float rotationSpeed = 100.0F; void Update() < float translation = Input.GetAxis("Vertical") * speed; float rotation = Input.GetAxis("Horizontal") * rotationSpeed; translation *= Time.deltaTime; rotation *= Time.deltaTime; transform.Translate(0, 0, translation); transform.Rotate(0, rotation, 0); > >
// Performs a mouse look.
var horizontalSpeed : float = 2.0; var verticalSpeed : float = 2.0; function Update () < // Get the mouse delta. This is not in the range -1. 1 var h : float = horizontalSpeed * Input.GetAxis ("Mouse X"); var v : float = verticalSpeed * Input.GetAxis ("Mouse Y"); transform.Rotate (v, h, 0); >
using UnityEngine; using System.Collections;
public class ExampleClass : MonoBehaviour < public float horizontalSpeed = 2.0F; public float verticalSpeed = 2.0F; void Update() < float h = horizontalSpeed * Input.GetAxis("Mouse X"); float v = verticalSpeed * Input.GetAxis("Mouse Y"); transform.Rotate(v, h, 0); > >
Традиционный игровой ввод
Unity поддерживает ввод с клавиатуры, джойстика и гейпада.
Virtual axes and buttons can be created on the Input window, and end users can configure Keyboard input in a nice screen configuration dialog.

Вы можете настроить джойстики, геймпады, клавиатуру и мышь, затем обращаться к ним через один простой скриптовый интерфейс.
Virtual Axes
Из скриптов все виртуальные оси доступны по их именам.
Каждый проект при создании содержит следующие оси ввода по умолчанию:
- Horizontal и Vertical привязаны к w, a, s, d и клавишам направления.
- Fire1, Fire2, Fire3 привязаны к клавишам Control, Option (Alt) и Command соответственно.
- Mouse X и Mouse Y привязаны к перемещениям мыши.
- Window Shake X и Window Shake Y привязаны к перемещению окна.
Добавление новых осей ввода
If you want to add new virtual axes go to the Edit > Project Settings menu, then select the Input category. Here you can also change the settings of each axis.

Вы привязываете каждую ось к двум кнопкам на джойстике, мыши или клавиатуре.
| Свойство: | Функция: |
|---|---|
| Name | Имя, используемое для проверки этой оси из скрипта. |
| Descriptive Name | Имя положительного значения, отображаемое на вкладке Input диалогового окна Configuration в автономных сборках. |
| Descriptive Negative Name | Имя отрицательного значения, отображаемое на вкладке Input диалогового окна Configuration в автономных сборках. |
| Negative Button | Кнопка, используемая для смещения значения оси в отрицательном направлении. |
| Positive Button | Кнопка, используемая для смещения значения оси в положительном направлении. |
| Alt Negative Button | Альтернативная кнопка, используемая для смещения значения оси в отрицательном направлении. |
| Alt Positive Button | Альтернативная кнопка, используемая для смещения значения оси в положительном направлении. |
| Gravity | Скорость в единицах в секунду, с которой ось возвращается в нейтральное положения, когда кнопки не нажаты. |
| Dead | Размер аналоговой мертвой зоны. Все значения аналоговых устройств, попадающие в этот диапазон, считаются нейтральными. |
| Sensitivity | Speed in units per second that the axis will move toward the target value. This is for digital devices only. |
| Snap | Если включено, значение оси будет сбрасываться в ноль при нажатии кнопки в противоположном направлении. |
| Invert | Если включено, Negative Buttons будут выдавать положительные значения, и наоборот. |
| Type | Тип ввода, который будет управлять осью. |
| Axis | Ось подключенного устройства, которая будет управлять этой осью. |
| Joy Num | Подключенный джойстик, который будет управлять этой осью. |
Используйте эти параметры для точной настройки внешнего вида ввода. Также, все они задокументированы во всплывающих подсказках в редакторе.
Использование осей ввода из скриптов
Вы можете запросить текущее состояние из скрипта так:
value = Input.GetAxis ("Horizontal");
An axis has a value between –1 and 1. The neutral position is 0. This is the case for joystick input and keyboard input.
Однако изменения осей Mouse и Window Shake показывают, насколько мышь или окно сдвинулись по сравнению с последним кадром. Это значит, что они могут быть больше, чем 1 или меньше, чем –1, когда пользователь быстро двигает мышь.
Можно создавать несколько осей с одним именем. При получении ввода, будет возвращаться ось с наибольшим абсолютным значением. Это позволяет назначить больше одного устройства ввода на одно имя оси. Например, создайте одну ось для ввода с клавиатура и одну ось для ввода с джойстика с одинаковым именем. Если пользователь использует джойстик, ввод будет идти с джойстика, иначе ввод будет идти с клавиатуры. Таким образом, вам не нужно учитывать откуда приходит ввод при написании скриптов.
Названия кнопок
Чтобы назначить кнопку оси, вам необходимо ввести имя кнопки в свойстве Positive Button или Negative Button в окне Inspector.
Keys (Клавиши)
Названия кнопок следуют этому соглашению:
- Обычные клавиши“: ”a“, ”b“, ”c» …
- Цифровые клавиши: “1”, “2”, “3”, …
- Клавиши стрелок: “up”, “down”, “left”, “right”
- Клавиши цифровой клавиатуры: “[1]”, “[2]”, “[3]”, “[+]”, “[equals]”
- Клавиши модификаторов: “right shift”, “left shift”, “right ctrl”, “left ctrl”, “right alt”, “left alt”, “right cmd”, “left cmd”
- Клавиши мыши: “mouse 0”, “mouse 1”, “mouse 2”, …
- Кнопки джойстика (от любого джойстика): “joystick button 0”, “joystick button 1”, “joystick button 2”, …
- Кнопки джойстика (от заданного джойстика): “joystick 1 button 0”, “joystick 1 button 1”, “joystick 2 button 0”, …
- Специальные клавиши: “backspace”, “tab”, “return”, “escape”, “space”, “delete”, “enter”, “insert”, “home”, “end”, “page up”, “page down”
- Функциональные клавиши: “f1”, “f2”, “f3”, …
Названия, используемые для определения кнопок одни и те же при написании скриптов и в окне Inspector.
value = Input.GetKey ("a");
Note also that the keys are accessible using the KeyCode enum parameter.
Руководство по переносу логики ввода для Unity
Вы можете перенести входную логику в Windows Mixed Reality, используя один из двух подходов:
- Общие API-интерфейсы Unity Input.GetButton или Input.GetAxis , которые охватывают несколько платформ.
- API-интерфейсы UnityEngine.XRModule, которые предлагают более широкие данные специально для контроллеров движения и рук HoloLens.
Общие API Input.GetButton и Input.GetAxis
В настоящее время Unity использует свои общие Input.GetButton api и Input.GetAxis API для предоставления входных данных для пакета SDK Oculus и Пакета SDK OpenVR. Если ваши приложения уже используют эти API для ввода, эти API являются самым простым способом поддержки контроллеров движения в Windows Mixed Reality. Вам просто нужно переназначить кнопки и оси в диспетчере ввода.
Если вы используете контроллеры HP Reverb G2, дополнительные инструкции по сопоставлению входных данных см . в разделе Контроллеры HP Reverb G2 в Unity .
Интерфейсы API ввода XR
В выпусках Unity был прекращен XR. API WSA в пользу пакета SDK для XR. Для новых проектов лучше использовать входные API XR с самого начала. Дополнительные сведения см. в разделе Входные данные XR Unity.
Если приложение уже создает пользовательскую логику ввода для каждой платформы, можно использовать API пространственного ввода для Windows в пространстве имен UnityEngine.InputSystem.XR . Эти API позволяют получить доступ к дополнительным сведениям, таким как точность положения или тип источника, чтобы отличить руки и контроллеры в HoloLens.
Если вы используете контроллеры HP Reverb G2, все входные API продолжают работать, за исключением InteractionSource.supportsTouchpad , который возвращает значение false без данных сенсорной панели.
Положение захвата и положение указателя
Windows Mixed Reality поддерживает контроллеры движения в разных форм-факторах. Дизайн каждого контроллера отличается своей связью между положением руки пользователя и естественным направлением вперед, которое приложения используют для указания при отрисовке контроллера.
Чтобы лучше представить эти контроллеры, можно исследовать два типа позы для каждого источника взаимодействия: позу захвата и позу указателя. Вы выражаете все координаты положения в мировых координатах Unity.
Поза захвата
Поза захвата представляет расположение ладони, обнаруженной HoloLens, или ладони, удерживающего контроллер движения. На иммерсивных гарнитурах используйте эту позу для отрисовки руки пользователя или объекта, удерживаемого в руке пользователя, например меча или пистолета.
- Положение захвата — это центроид ладони при естественном удержании контроллера влево или вправо, чтобы центрировать положение в захвате.
- Правая ось ориентации захвата — это луч, который является нормальным для вашей ладони, вперед от левой ладони, назад от правой ладони, когда вы полностью открываете руку, чтобы сформировать плоскую позу с пятью пальцами.
- Ось сцепления вперед — это луч, который указывает вперед через трубку, сформированную пальцами без большого пальца, когда вы частично закрываете руку, как будто удерживая контроллер.
- Ориентация захвата вверх по оси — это ось вверх, подразумеваемая определениями справа и вперед.
Положение указателя
Поза указателя представляет кончик контроллера, указывающего вперед. Эту позу лучше всего использовать для приведения лучей, указывающих на пользовательский интерфейс при отрисовке самой модели контроллера.
Положение указателя доступно в Unity только через API windows MR, sourceState.sourcePose.TryGetPosition/Rotation который передается в InteractionSourceNode.Pointer качестве аргумента.
См. также раздел
- Руководства по переносу приложений
- Общие сведения о переносе
- UnityEngine.XR.InputTracking
- Контроллеры движения
- Контроллеры движения в Unity
События Unity | C#
Как поймать событие Input.GetAxis в Unity? И, если можно, добавьте ссылку на документацию со всеми имеющимися событиями unity.
Отслеживать
задан 6 июл 2020 в 22:03
Sire IMPACTUS Sire IMPACTUS
97 1 1 серебряный знак 14 14 бронзовых знаков
Мне кажется, Input.GetAxis это не событие, а метод.
6 июл 2020 в 22:13
Это я знаю, но мне нужно событие именно этого метода.
6 июл 2020 в 22:23
Лучше просто скажите своими словами, что вы хотите сделать, потому что у методов не бывает событий. Событие это особый вид делегата, а делегат — особый вид метода. GetAxis() — обычный метод, и к делегатам никакого отношения не имеет.
6 июл 2020 в 22:38
Вангую! Хочет совместить работу Input.GetAxis() с другим UI аналогом для мобильника, что бы поддержывался и геймпад и тачскрин. И не смотря на то что мобильники стали основная платформа юнити, Input не обслуживает UI интерфейсы, только Touchs . Вот он и хочет понять, когда ловить инпуты с GetAxis , а когда с UI .
6 июл 2020 в 23:49
Нет, не то и не другое. Я хочу ловить нажатие AWSD и запускать соответствуещий метод. Это можно легко сделать в update или fixedUpdate, но я слышал, что есть способ с событиямия, поэтому хотелось его попробовать.
7 июл 2020 в 9:38
3 ответа 3
Сортировка: Сброс на вариант по умолчанию
Input.GetAxis возвращает число (текущая скорость на определенной оси), а чтобы это было событием нужно уже это реализовывать вручную. Но вообще все, что касается частого обновления, не очень то хорошо реализовывать через events, а input в особенности (проверено на собственном опыте).
Для кнопки задержка в .1s может и норм, но вот когда пытаешься удрать от врагов и управление работает с небольшой задержкой — это уже неприемлемо. Так что лучше тут воздержаться от использования событий.