InputSystem实现按键输入--方法2

介绍一下实现按键输入的另外一种方式:通创建一个InputActions资源,利用InputActionAsset
InputSystem实现按键输入--方法2_第1张图片
我们来编辑该资源是设置按键
InputSystem实现按键输入--方法2_第2张图片
InputSystem实现按键输入--方法2_第3张图片
代码中通过加载该资源赋值给InputAction

private const string INPUTACTIONS_ASSETADDRESS = "Assets/ConActions.inputactions";
public InputAction sInput;
private InputActionAsset m_InputAsset;
...
//加载函数
public static void LoadAsset(object key, Action> onComplete) where T : class
{
	AsyncOperationHandle operation = Addressables.LoadAssetAsync(key);
	if (onComplete != null)
	{
		operation.Completed += onComplete;
	}
}

//调用实现
LoadAsset(INPUTACTIONS_ASSETADDRESS, (AsyncOperationHandle asset) =>
{
	m_InputAsset = asset.Result;
	InputActionMap map = m_InputAsset.GetActionMap("Player");
	sInput = map?.TryGetAction("FuncX");

	Action tellMeYourName1 = (InputAction.CallbackContext context) =>
	{
		Debug.Log("my keyboard is " + sInput.name);
		if (context.phase == InputActionPhase.Performed)
		{
			Debug.Log(sInput.name + " keyboard is Performed, set HoldBeginTime");
			HoldBeginTime = Time.time;
		}
		else if (context.phase == InputActionPhase.Cancelled)
		{
			Debug.Log(sInput.name + " keyboard is Cancelled, reset HoldBeginTime");
			HoldBeginTime = 0;
		}
	};

	// 激活
 // 注意Enable,需在加载完设置
	sInput.Enable();
	sInput.started -= tellMeYourName1;
	sInput.performed -= tellMeYourName1;
	sInput.cancelled -= tellMeYourName1;
 sInput.started += tellMeYourName1;
	sInput.performed += tellMeYourName1;
	sInput.cancelled += tellMeYourName1;
});

设置一个长按回调Callback

public Action Callback;
void Update()
{
if (HoldBeginTime > 0.0f)
{
		if (Time.time >= HoldBeginTime + HOLD_TIME)
		{
			Debug.Log("Hold S Input!!!");
			HoldBeginTime = 0.0f;
			Callback.Invoke(999);
		}
	}
}

按下s键结果
InputSystem实现按键输入--方法2_第4张图片
get点:Lambda表达式、InputAction、InputActionAsset、InputActionMap
InputAction.CallbackContext

你可能感兴趣的:(Unity)