Unity Input System学习

此文章仅限个人笔记使用,里面记录多有不足,如想详细了解请移步

https://www.bilibili.com/video/BV15A411L7Eb?from=search&seid=16902722505098657371

首先在PackageManager内安装InputSystem

安装完毕后,右键 Create-Input Actions

分别设置 2,3,4步骤,步骤4需要在创建完第3步后设置一下类型(这里我选择的是Value中的Vector2)

然后再回到第3步骤,添加Add Binding或者Add 2D Vector Composite,Add Binding选择的是手柄等,Add 2D Vector Composite可以设置键盘上的按键

设置完后点击Apply会出现与之对应的脚本

我们创建一个脚本 PlayerInput:主要功能就是检测输入系统的动作

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.InputSystem;
using UnityEngine.Events;
[CreateAssetMenu(menuName ="[Player Input]")]
public class PlayerInput : ScriptableObject,NewControls.IGamePlayerActions
{
    NewControls inputAction;//输入的行为
	public event UnityAction<Vector2> onMove=delegate { };//开始移动
	public event UnityAction onStopMove = delegate { };
	private void OnEnable()
	{
		inputAction = new NewControls();
		inputAction.GamePlayer.SetCallbacks(this);
	}
	private void OnDisable()
	{
		DisableAllInputs();
	}
	public void DisableAllInputs() 
	{
		inputAction.GamePlayer.Disable();
	}
	public void EnableGameplayInput()
	{   //启动动作表
		inputAction.GamePlayer.Enable();
		//锁定鼠标
		//Cursor.visible = false;
		//Cursor.lockState = CursorLockMode.Locked;
	}
	public void OnMove(InputAction.CallbackContext context)
	{
		//当操作指令按下
		if (context.phase==InputActionPhase.Performed)
		{
			if (onMove!=null)
			{
				onMove.Invoke(context.ReadValue<Vector2>());
			}
			
		}
		//当操作指令抬起
		if (context.phase==InputActionPhase.Canceled)
		{
			onStopMove.Invoke();
		}
	}
}

创建完脚本后点击右键 Create-[Player Input]就会生成一个 New player Input

然后我们创建一个player的脚本,input为我们上一步的New player Input 拖入就行,然后挂在到一个游戏对象上面就可以控制上下左右的移动了


using UnityEngine;
public class Player : MonoBehaviour
{
   [SerializeField] PlayerInput input;
	new Rigidbody2D rigidbody;

	private void Awake()
	{
		rigidbody = this.GetComponent<Rigidbody2D>();
	}
	private void Start()
	{
		rigidbody.gravityScale = 0f;
		input.EnableGameplayInput();
	}
	private void OnEnable()
	{
        input.onMove += OnMove;
        input.onStopMove += OnStopMove;

    }
	private void OnDisable()
	{
		input.onMove -= OnMove;
		input.onStopMove -= OnStopMove;
	}
	private void OnStopMove()
	{
		rigidbody.velocity =Vector2.zero;
	}

	private void OnMove(Vector2 arg0)
	{
		Debug.LogError(arg0);
		rigidbody.velocity = arg0 * 10;
	}


  
}

猜你喜欢

转载自blog.csdn.net/qq_36592993/article/details/118362113