InControl: Bindings FAQ
How can I detect whether keyboard or controller input was used on bindings?
There is a LastInputType
property on both PlayerActionSet
and PlayerAction
which you can query for this purpose. It returns one of the BindingSourceType
enum:
if (actions.LastInputType == BindingSourceType.KeyBindingSource)
{
ShowKeyboardControls();
}
else
if (actions.LastInputType == BindingSourceType.DeviceBindingSource)
{
ShowControllerControls();
}
Additionally PlayerActionSet
and PlayerAction
also have an event callback you can use if you only want to be notified when it changes:
public event Action<BindingSourceType> OnLastInputTypeChanged;
How can I get to the actual keys on a keyboard binding?
foreach (var binding in action.Bindings)
{
var keyBindingSource = binding as KeyBindingSource;
if (keyBindingSource != null)
{
var keyCombo = keyBindingSource.Control;
for (var keyIndex = 0; keyIndex < keyCombo.Count; keyIndex++)
{
var key = keyCombo.Get( keyIndex ); // returns enum Key
var keyInfo = KeyInfo.KeyList[(int) key];
Debug.Log( keyInfo.Name );
}
}
}