Unity获取莱仕达V3Pro方向盘控制数据

InputSystem

1. 安装

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2. 创建InputActions

在Project视图中Assets/Resource/Input下右键创建
在这里插入图片描述
这是一个空的InputActions
在这里插入图片描述
在这里插入图片描述

InputSystem相关介绍

层级关系:InputSystem=>InputActions=>ActionMaps=>Actions

简单来说我们可以将InputActions视为我们项目里其中一个控制器的输入操作管理集,而ActionMaps则为该控制器其中的一个输入映射集。而Actions则为ActionMaps里其中一个动作输入映射。
总的来说:一个InputActions可以包含多个ActionMaps,一个ActionMaps又能包含多个Actions

3. 配置ActionMaps

这里我需要2个数据,一是方向盘旋转的数据,二是脚踏板上的油门和刹车

先展示下完整配置
在这里插入图片描述
可以看出,我添加了一个叫XInput的动作映射集,然后在XInput下又创建了3个动作

接下来我们再分别看下每个动作的映射

首先,第一个我们创建方向盘旋转的动作映射Steeringwheel,当我们创建一个Action后,会发现右侧Action栏中有一些配置,如下图
在这里插入图片描述
其中常用的ActionType,各个参数说明如下:

  1. Button 默认设置,包括按钮或者按键触发的一次性动作(按下或抬起分别会触发一次)
  2. Value 提供一种连续状态变化事件,如果设置了多个输入,就会切换到最主要的一个。用它进行模拟控制,比如移动。
  3. Pass Through 和Value很相似,但它不会像Value一样(如果有多个输入时,不会只选择最主要的那个,而把其他的输入忽略)

很明显,方向盘是一种连续变化的值,因此我们尝试将ActionType设为Value,会发现其下多出一个ControlType选项,如下图
在这里插入图片描述
这里我们如何确定到底选择哪个类型的值呢?
可以使用InputSystem自带的一个分析工具InputDebugger
在这里插入图片描述
在这里插入图片描述
这里我们可以看到有一个XInput的控制器,这个就是我们的方向盘,双击打开查看详细信息
在这里插入图片描述
在这里我们可以看到方向盘的全部数据,接着我们尝试转动方向盘,同时观察数据变化,找到方向盘的数据项
在这里插入图片描述
最终发现方向盘的类型为LeftStick,即左摇杆,往左打死x轴值为 -1,往右打死为1,回正为0,值范围 -1 ~ 1,类型为StickControl,用同样的方法找出油门和刹车踏板的类型

刹车:DisplayName为LeftTrigger,类型为Button,值范围 0 ~ 1
在这里插入图片描述
油门:DisplayName为RightTrigger,类型为Button,值范围 0 ~ 1
在这里插入图片描述

知道了这些就好办了,那么Steeringwheel的ControlType就是stick,仔细观察我们可以看到stick类型的数据,是有两个值的(x, y),因此这里选择Vector2也是可以的。
两个踏板虽然是ButtonControl类型,但其值的变化也是连续的,因此两个踏板我们将其ControlType设为Axis,表示一维轴浮点数

到这里我们创建好3个动作的映射
在这里插入图片描述
展开Actions发现其下还有Binding需要配置,这里我们需要配置Binding的Path参数,展开发现有很多选项

在这里插入图片描述
可以手动选择,手动选择可能会找不到需要的,也可以直接搜索,这里我们输入Left Stick直接搜索
在这里插入图片描述
由于我这款方向盘是支持DInput和XInput两种模式,而XInput又是微软提供的一套标准控制器API,微软的XBoxOne的手柄也是用的XInput,因此这里选择Left Stick [Xbox Controller]

两个踏板同理
在这里插入图片描述
配置完后记得保存
在这里插入图片描述
然后在Project视图中选中InputActions文件,右侧Inspector勾选生成C#类,点击Apply应用,会生成一个InputActions.cs的脚本
在这里插入图片描述
在这里插入图片描述
这个脚本不需要修改,我们后面使用它就行

4. 编写处理函数

接下来,我们创建一个空对象,为其添加一个Player Input组件,并创建一个脚本Wheel Controller
在这里插入图片描述
观察PlayerInput组件的Behavior属性,有4个选项(具体区别自行查阅),我们选择Send Message

使用Send Message时,每次的触发会盗用一个对应的函数(就是在对应的Actions名前面加个On-)正如下图所示在我们PlayerInput组件当中我们将BehaviorType选择了Send Message后我们的输入参数将会通过Send Message方法发送到我们对应生成的函数中
比如Input Action 名为 Jump,那么对应的函数即为 OnJump

在Wheel Controller脚本中添加3个动作的处理函数

	// 将上一步生成的InputActions脚本定义为成员变量,
	// 并在OnEnable和OnDisable是启用和禁用对应的ActionMaps
	private InputActions input;
	
    private void Awake()
    {
        input = new InputActions();
    }

    private void OnEnable()
    {
        input.XInput.Enable();
    }

    private void OnDisable()
    {
        input.XInput.Disable();
    }

    void OnSteeringwheel(InputValue value)
    {
        moveVal = value.Get<Vector2>();
        Debug.Log($"OnSteeringwheel: {moveVal}");
    }

    void OnBrake(InputValue value)
    {
        brakeVal = value.Get<float>();
        Debug.Log($"OnBrake: {brakeVal}");
    }

    void OnAcceleration(InputValue value)
    {
        accelerationVal = value.Get<float>();
        Debug.Log($"OnAcceleration: {accelerationVal}");
    }

然后运行,观察控制台打印
在这里插入图片描述

  • 21
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Gowcage

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

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

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

打赏作者

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

抵扣说明:

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

余额充值