2016-10-25 1 views
0

Я хочу найти keyCode, который я хочу, из диспетчера ввода (Edit -> Project Settings -> Input), где я установил оси, например «Консоль» => «^», используя Name ось.Как получить keyCode, назначенный в настоящее время диспетчеру ввода?

Но я не могу найти, где выставлены оси, не говоря уже о их свойствах. Исследование ничего не дает, документация фокусируется на настройке осей в инспекторе или получении значений осей.

TL; DR

Что мне нужно, чтобы получить в результате KeyCode в настоящее время назначенного положительного ключа входного, в по оси имени.

Что-то вроде keyCode myKey = Input.getAxesByName("NameOfAxis")[0].positiveKey; ... но этого, очевидно, не существует.

Я мог бы также перебирать оси, письма, которые функционируют себя (в пределах for цикла: if(Input.Axes[i].Name == NameOfAxis) return Input.Axes[i].keyCode; ... если бы я только знал, как добраться до них

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

+0

В настоящее время я создаю свой собственный менеджер ввода -...- действительно, было бы так легко, почему они не включили что-то простое? Ну, может быть, у них есть, и я просто не нашел его –

+0

То, что вы ищете, не существует. Вы собираетесь использовать это для редактора или сборки? – Programmer

+0

@Programmer Ах, стыдно ... Ищете его для сборки. Создаем свой собственный менеджер ввода прямо сейчас. К счастью, это кажется довольно простым даже без поиска методов на нем. Наконец, я могу добавить свои собственные методы. –

ответ

1

Я понял это и блог решений here.

var inputManager = AssetDatabase.LoadAllAssetsAtPath("ProjectSettings/InputManager.asset")[0]; 
SerializedObject obj = new SerializedObject(inputManager); 
SerializedProperty axisArray = obj.FindProperty("m_Axes"); 
if (axisArray.arraySize == 0) 
    Debug.Log("No Axes"); 

for(int i = 0; i < axisArray.arraySize; ++i) 
{ 
    var axis = axisArray.GetArrayElementAtIndex(i); 
    var name = axis.displayName;  //axis.displayName "Horizontal" string 
    axis.Next (true); //axis.displayName  "Name" string 
    axis.Next (false);  //axis.displayName "Descriptive Name" string 
    axis.Next (false);  //axis.displayName "Descriptive Negative Name" string 
    axis.Next (false);  //axis.displayName "Negative Button" string 
    axis.Next (false);  //axis.displayName "Positive Button" string 
    var value = axis.stringValue; //"right" 

    Debug.Log(name + " | " + value); 
} 

Ниже снимки может быть полезно, чтобы понять, как это работает. enter image description here enter image description here

SerializedProperty.Next, программно обходит свойства и может помочь получить строковое представление keyCode.

+0

Я оставил комментарий об этом под вопросом OP. Я сказал: «Это может быть возможно в редакторе с помощью размышлений. Поскольку вы упомянули сборку, маловероятно, что вы это сделаете» **. К сожалению, OP хочет сделать это в сборке, и это не будет работать. – Programmer

+1

@ Программист, я с тобой! благодаря! – David

+0

Эй, спасибо за ответ. Даже если это не применимо в Build, это полезно и дает нам представление о механизмах редактора и внутренней обработке ввода. С тех пор я узнал, что эта широко востребованная функция была включена в еще экспериментальную версию разработки менеджера ввода следующего поколения: https://blogs.unity3d.com/2016/04/12/developing-the-new- ввод-системы вместе-с-вы / –