As mentioned in previous sections, an input handler must be created specifically for Unity's new input system. The following code shows one way to do it.
Copy using System . Collections ;
using System . Collections . Generic ;
using System . Linq ;
using UnityEngine ;
using UnityEngine . InputSystem ;
using UnityEngine . InputSystem . Utilities ;
using Lightbug . CharacterControllerPro . Implementation ;
public class InputSystemHandler : InputHandler
{
[ SerializeField ]
InputActionAsset inputActionsAsset = null ;
[ SerializeField ]
bool filterByActionMap = false ;
[ SerializeField ]
string gameplayActionMap = "Gameplay" ;
[ SerializeField ]
bool filterByControlScheme = false ;
[ SerializeField ]
string controlSchemeName = "Keyboard Mouse" ;
Dictionary < string , InputAction > inputActionsDictionary = new Dictionary < string , InputAction >();
protected virtual void Awake ()
{
if ( inputActionsAsset == null )
{
Debug . Log ( "No input actions asset found!" );
return ;
}
inputActionsAsset . Enable ();
if ( filterByControlScheme )
{
string bindingGroup = inputActionsAsset.controlSchemes.First( x => x.name == controlSchemeName ).bindingGroup;
inputActionsAsset . bindingMask = InputBinding . MaskByGroup ( bindingGroup );
}
ReadOnlyArray < InputAction > rawInputActions = new ReadOnlyArray < InputAction >();
if ( filterByActionMap )
{
rawInputActions = inputActionsAsset . FindActionMap ( gameplayActionMap ). actions ;
for ( int i = 0 ; i < rawInputActions . Count ; i ++ )
inputActionsDictionary . Add ( rawInputActions [i]. name , rawInputActions [i] );
}
else
{
for ( int i = 0 ; i < inputActionsAsset . actionMaps . Count ; i ++ )
{
InputActionMap actionMap = inputActionsAsset . actionMaps [i];
for ( int j = 0 ; j < actionMap . actions . Count ; j ++ )
{
InputAction action = actionMap . actions [j];
inputActionsDictionary . Add ( action . name , action );
}
}
}
for ( int i = 0 ; i < rawInputActions . Count ; i ++ )
{
inputActionsDictionary . Add ( rawInputActions [i]. name , rawInputActions [i] );
}
}
public override bool GetBool ( string actionName )
{
InputAction inputAction;
if ( ! inputActionsDictionary . TryGetValue ( actionName , out inputAction ) )
return false ;
return inputActionsDictionary [actionName]. ReadValue < float >() >= InputSystem . settings . defaultButtonPressPoint ;
}
public override float GetFloat ( string actionName )
{
InputAction inputAction;
if ( ! inputActionsDictionary . TryGetValue ( actionName , out inputAction ) )
return 0f ;
return inputAction . ReadValue < float >();
}
public override Vector2 GetVector2 ( string actionName )
{
InputAction inputAction;
if ( ! inputActionsDictionary . TryGetValue ( actionName , out inputAction ) )
return Vector2 . zero ;
return inputActionsDictionary [actionName]. ReadValue < Vector2 >();
}
}