Unity的InputSystem使用实践

2023-05-16

如何使用

首先得有一个PlayerInput在场景中,每一个PlayerInput表示一个玩家
在这里插入图片描述
在这里插入图片描述
在Actions里面选择自己的Actions,可以新建:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
比如在PlayerMaps中的MoveActions就是一个2D向量组合器

比如新建一个在这里插入图片描述
然后把键盘数字键8绑定成到UP,勾选下面的Keyboard&Mouse,这样就成了键盘的8键是我们的UP,同理绑定其他几个
在这里插入图片描述
在这里插入图片描述
然后在inspector面板中生成一下CS文件:
在这里插入图片描述

绑定事件

手动绑定

在这里插入图片描述

Send Messages或者Broadcast Messages

您可以通过定义组件,像这样的方法您的应用程序设置来响应行动:

public class MyPlayerScript : MonoBehaviour
{
    // "fire" action becomes "OnFire" method. If you're not interested in the
    // value from the control that triggers the action, use a method
    // without arguments.
    public void OnFire()
    {
    }
    // If you are interested in the value from the control that triggers an action,
    // you can declare a parameter of type InputValue.
    public void OnMove(InputValue value)
    {
        // Read value from control. The type depends on what type of controls.
        // the action is bound to.
        var v = value.Get<Vector2>();
        // IMPORTANT: The given InputValue is only valid for the duration of the callback.
        //            Storing the InputValue references somewhere and calling Get<T>()
        //            later does not work correctly.
    }
}

UnityEvent Actions

Invoke Unity Events,每个动作必须被路由到目标方法。该方法与InputAction的started,performed和canceled回调具有相同的格式。

比如下面的方法形式
在这里插入图片描述

CSharp Events

事件为普通的CS事件(event),然后可以接收下面的事件通知
以下事件可用:

  • onActionTriggered (针对玩家的所有动作的集体事件);
  • onDeviceLost;
  • onDeviceRegained;
    用来检视设备变化

代码里面绑定回调

假如要实现2D物体的移动

代码注册回调:

 public InputManager inputActions;
    private Vector2 direction;

    private void Awake()
    {
        inputActions = new InputManager();
    }

    private void OnEnable()
    {
        inputActions.Enable();
        inputActions.Player.Move.performed += ctx =>  Move(ctx);
        inputActions.Player.Move.canceled += ctx => Move(ctx);
    }
    private void OnDisable()
    {
        inputActions.Player.Move.performed -= ctx =>  Move(ctx); ;
        inputActions.Player.Move.canceled -= ctx => Move(ctx);
        inputActions.Disable();
    }
    public void Move(InputAction.CallbackContext context)
    {
        var moveValue = context.ReadValue<Vector2>();
        Debug.Log(moveValue);
        direction = moveValue;
        
    }

    void Update()
    {
        if (direction != Vector2.zero)
        {
            Vector3 delta = new Vector3(direction.x, direction.y, 0) * Time.deltaTime * 5f;
            transform.position = transform.position + delta;
        }
    }

还有直接获取设备按键

Keyboard keyboard;

keyboard = InputSystem.GetDevice<Keyboard>(); 

if (keyboard.wKey.isPressed)
{
    direction = new Vector2(0, 1);
    Vector3 delta = new Vector3(direction.x, direction.y, 0) * Time.deltaTime * 5f;
    transform.position = transform.position + delta;
}

按键是被按下还是被按住

Keyboard.current.spaceKey.isPressed
Keyboard.current.spaceKey.wasPressedThisFrame

额,最后发现按小键盘的数字键不会动,但是按主区域的数字键就可以,原因是绑定错了:
应该是Numpad8
在这里插入图片描述
修改过后保存
在这里插入图片描述

参考:

https://docs.unity3d.com/Packages/com.unity.inputsystem@1.0/manual/Components.html
https://www.youtube.com/watch?v=HwbbvjzT3qE
https://github.com/sniffle6/Input-System-Strategy-Pattern

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Unity的InputSystem使用实践 的相关文章

  • 一些个人常用的网站网址

    一些个人常用的网站网址 GitHub https github com Gitee https gitee com 1 书栈网 https www bookstack cn explore cid 27 tab popular 2 Unit
  • unity粒子特效附上贴图后播放动画

    转自 http jingyan baidu com article f96699bbb1a0d6894f3c1b77 html 参考 http www unitymanual com thread 2993 1 1 html dsign a
  • 【UGUI】2D头顶血条制作

    前言 近期因为需要制作玩家和敌人头顶的2D血条 查找了很多博客 发现很多都拘束于Canvas的渲染模式必须要设定为ScreenSpace Overlay 还有应该是版本原因 我的是unity2019 1 11f1 用RecttTransfo
  • Unity WebGL错误集锦

    ips 0 Unity的PlayerSettings的otherSettings或者Publish Settings里面的Enable Exceptions里面选择Full StackTrace 可以在打出的包中的浏览器的webgl打印出错
  • 蒙特卡洛积分、重要性采样、低差异序列

    渲染公式 渲染的目标在于计算周围环境的光线有多少从表面像素点反射到相机视口中 要计算总的反射光 每个入射方向的贡献 必须将他们在半球上相加 为入射光线 与法线 的夹角 为方便计算可以使用法线向量和入射向量 单位化 的乘积表示 对于基于图像的
  • unity网络资源导入

    1 找到需要导入的文件 这里导入fbx格式 2 打开unity界面 在Asset目录下创建文件夹FBX 将需要导入的fbx预制体或整个文件夹拖入创建的FBX文件夹下 3 选中需要的fbx预制体并拖至场景中 4 双击定位到当前物体 5 找到需
  • 1.17 从0开始学习Unity游戏开发--场景切换

    前面的所有文章我们都在一个固定的游戏场景内进行开发 在最开始介绍场景这个概念的时候就已经提及 这个场景可以是一张地图 或者是一个对战房间等等 所以显然这个场景可以有多个 并且可以从一个场景切换到另外一个场景 那么在Unity中如何进行场景切
  • Unity中级客户端开发工程师的进阶之路

    上期UWA技能成长系统之 Unity高级客户端开发工程师的进阶之路 得到了很多Unity开发者的肯定 通过系统的学习 可以掌握游戏性能瓶颈定位的方法和常见的CPU GPU 内存相关的性能优化方法 UWA技能成长系统是UWA根据学员的职业发展
  • Unity中按钮检测鼠标状态

    改方法主要是用于按钮检测鼠标的进入 滑出 点击 抬起 长按 长按停止 1 先将下面这个脚本挂载到需要检测鼠标状态的按钮上 using System Collections using System Collections Generic u
  • GooglePlay提审警告(com.google.android.gms:play-services-safetynet:17.0.0)

    1 Goole在今年6月份出的新政策 不在使用safetynet 而使用Play Integrity API 2 项目本身没有使用过safetynet 3 使用了firebase 查阅资料 解决方案如下 implementation pla
  • unity后台加密时间锁

    前言 在做一些项目的时候 有些不良甲方在给完项目后会有不给尾款的情况 之前都是加一些水印啥的 感觉不是很方便 第一不美观 第二如果甲方给完尾款后还得重新打包去水印 然后又做过一个本地的时间锁 等到时间 程序直接退出 但是感觉还是不方便 有时
  • unity: C#的Action Event Delegate的异同

    目录 一 Action 二 Event 三 Action和Event区别 四 Delegate 总结 Action Event Delegate的异同 前言 Action Event和Delegate都是C 语言中的重要概念 分别用于管理函
  • 【Unity】按Esc进入操作菜单

    本文章是基于如下视频的自我总结 https www youtube com watch v JivuXdrIHK0 步骤如下 1 在Canvas 界面添加一个Panel Panel中添加一个按钮 调整按钮的大小为合适大小 调整字体的大小为合
  • Unity保存图片到相册

    Unity保存图片到Android相册 Java 纯文本查看 复制代码 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
  • 【Unity步步升】监控与检测物体的各种方案,如:射线、碰撞、挂载等...

    在制作AR模型数值控制方案的时候遇到了检测的问题 学习过程受益匪浅 故今天为大家整理带来一篇监控与检测物体的参考方案集合 目录 一 射线检测 二 物体存在检测 三 碰撞检测 一 射线检测 单射线检测 首先完成搭建场景如下图1 1 我这里用到
  • 游戏开发创建操作之玩家信息系统的建立

    游戏一般都需要玩家信息系统 那么我们应该如何搭建玩家信息系统 接下来我将展示一种简单的方法 完整代码如下 using System Collections using System Collections Generic using Uni
  • 游戏开发常见操作梳理系列之——玩家信息的显示系统

    在游戏中 有不少游戏在左上角会出现玩家的头像和等级以及血量 这就是玩家的信息显示系统 那么这些是如何制作的呢 接下来我将讲讲代码的操作 其它操作我会在其它笔记中一一说明 敬请期待 信息的显示相当简单就是控制一些UI 然后在其它系统里面填写相
  • 游戏开发常见操作梳理之NPC药品商店系统(NGUI版)

    后续会出UGUI Json的版本 敬请期待 游戏开发中经常会出现药品商店 实际操作与武器商店类似 甚至根据实际情况可以简化设置 废话不多说 直接上代码 药品商店的源码 using System Collections using Syste
  • 游戏开发常见操作梳理之角色选择一

    进入游戏后 我们经常会进入角色选择的界面 通常是左右两个按钮可以更改角色供玩家选择 对于这种界面我们通常使用数据持久化将角色信息存储起来 接下来的笔记中 我将使用自带的数据持久化系统对其进行操作 实现角色的选择页面 后续会更新xml系列的文
  • 游戏开发常用实践操作之按动任意键触发

    接下来一些笔记会对于一些大大小小的实践操作进行记录 希望对你有所帮助 在游戏中 我们经常会遇到一些按动任意键触发的操作 接下来展示核心代码 以下是对于Unity中的操作 使用的UI是NGUI 对于核心操作没有影响 你可以自己置换 void

随机推荐