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;
	}


  
}

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HoFunGames

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值