参考
Input System新输入系统(三)——在游戏中更换按键绑定
练习 Input System Version 1.7.0
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.InputSystem;
public class InputActionCtrl : MonoBehaviour
{
public InputActionAsset actionAsset;
private InputAction moveAction;
private InputAction fireAction;
private InputAction jumpAction;
public InputActionReference moveReference;
public InputActionReference fireReference;
public InputActionReference jumpReference;
public InputAction autoSettingAction; //Inspector 自定义
void Start()
{
//方式1、开启所有
//moveAction = actionAsset.FindActionMap("TestMap").FindAction("Move");
//fireAction = actionAsset.FindActionMap("TestMap").FindAction("Fire");
//jumpAction = actionAsset.FindActionMap("TestMap").FindAction("JumpState");
//actionAsset.Enable();
方式2、开启单个
moveAction = moveReference.action;
fireAction = fireReference.action;
jumpAction = jumpReference.action;
moveAction.Enable();
fireAction.Enable();
jumpAction.Enable();
//方式1 action
moveAction.started += OnMove;
moveAction.performed += OnMove;
moveAction.canceled += OnMove;
fireAction.performed += OnFire; //不启了Initial State Check 按键按下执行
jumpAction.performed += OnJump; //开启了Initial State Check 按键状态变化执行
//Inspector 自定义
autoSettingAction.Enable();
autoSettingAction.performed += OnSetting;
InputSystem.onActionChange += OnActionChange;//所有 按键状态变化执行
}
private void OnDestroy()
{
//1、关闭所有
actionAsset.Disable();
2、关闭单个
//moveAction.Disable();
//fireAction.Disable();
//jumpAction.Disable();
autoSettingAction.Disable();
}
private void OnJump(UnityEngine.InputSystem.InputAction.CallbackContext obj)
{
Log(obj.action);
}
private void OnFire(UnityEngine.InputSystem.InputAction.CallbackContext obj)
{
Log(obj.action);
}
private void OnMove(UnityEngine.InputSystem.InputAction.CallbackContext obj)
{
Vector2 vector2 = obj.action.ReadValue<Vector2>();
Log(obj.action, null, vector2.ToString());
}
private void OnSetting(UnityEngine.InputSystem.InputAction.CallbackContext obj)
{
Log(obj.action);
}
private void OnActionChange(object obj, InputActionChange change)
{
switch (change)
{
case InputActionChange.ActionStarted:
case InputActionChange.ActionPerformed:
case InputActionChange.ActionCanceled:
//Log((InputAction)obj, "InputSystemChange");
break;
default:
break;
}
}
void Log(InputAction action, string typeStr = null, string valStr = null)
{
string value = ($"InputAction {typeStr} On{action.name} : {action.phase} {action.IsPressed()} {action.triggered} {valStr}");
Log(value);
}
void Log(string value)
{
Debug.Log(value);
}
//方式2 action
public Vector2 moveValue;
public bool isFire, isJump;
void Update()
{
moveValue = moveAction.ReadValue<Vector2>();
isFire = fireAction.IsPressed();
isJump = jumpAction.IsPressed();
}
}