admin管理员组

文章数量:1621123

Unity开发罗技方向盘 白话版

  • 目录
    • 前言
    • 准备工作
    • 测试阶段
      • 运行失败的解决
    • 接入Unity
      • Demo的使用方法
      • 接入自己的项目
    • 问题与总结
      • 问题
      • 总结

目录

前言

最近在做罗技G29的方向盘的Unity开发,因为设备很贵(2000+)所以在买之前先进行了一波调研,看看用Unity开发的可行性。在翻看大量的文章之后我发现大多数文章的内容都是复制粘贴的,很蠢。在实际的开发中遇到了许多坑,我自己一点点爬了出来。想把这些个人的心得写出来,省的后人再去踩这些坑。

居然还有好多文章讲解用Unity的InputManager来调节摁键。人家罗技都提供SDk了 还教别人用Input.GetKeyDown(KeyCode.JoystickButton0) 这种方法。看着就气。还有什么Unity最多支持24个摁键的 离合要自己写的。。。不要坑我们萌新了好么。

萌新一名 有错误还请大神指点。
就是因为萌新 好多东西需要百度,百度一个不会的 会出现三个不会的名词来给你解释,到头来不会的东西更多了,所以这篇文章会以掰皮说陷的方式讲解

不要问我 为什么要这样做,这么做对了就行 详细的自己去看英文文档去

准备工作

罗技官网下载最新版的SDK
我在用的时候是8.75.30版 可以参考下

Asset Store下载Logitech Gaming SDK
我在开发时是1.7版本
把这个在AssetStore下载号的包 导入Unity
注意第一个坑
找到罗技官网下载的SDK文件夹 用该文件夹下的LogitechSteeringWheelEnginesWrapper.dll文件 替换掉 你的工程名\Asset\Logitech SDK\目录下 同名文件
目前版本AssetStore上的SDK有这个问题 不替换掉会报错,而且这个问题在上一个版本的SDK中也存在(就是罗技的人懒得改)。未来可能会在某个版本修复这个问题吧。

下载Logitech游戏软件
这里第二个坑
罗技这个驱动软件越做越烂。 这里尽量下载 Logitech游戏软件 不要选择Logitech G Hub
G Hub 下载不稳定有的时候会很慢 而且有的时候会识别不到方向盘,所以还是选择老版本的Logitech游戏软件吧
这个坑在于这个软件是 区分Windows版本的 win7 win8 win10 32位 64位 会有区别 请选择跟自己电脑适配的版本
我这里开发使用是 Win10 64位

测试阶段

开始测试时 请先打开Logitech游戏软件 保持后台运行,先确保游戏软件已经识别到了 方向盘。
将\Assets\Logitech SDK\Script Sample下的LogitechSteeringWheel.cs脚本添加到摄影机上(这个文件下的其他脚本是控制其他的输入设备的,有兴趣可以了解一下)。
运行场景

一切正常 就会是这个样子的,这时候操作你的方向盘 挡杆 脚踏板 来看看都对应哪些数值吧。VS打开这个脚本 就可以找到对应的代码了。

运行失败的解决

红色报错的 / x64 / logitechlcdengineswrapper.dll 类似这样
按照上面的方法 替换下 logitechlcdengineswrapper.dll 这个文件

没有红色报错 项目可以运行 但是没有数值 提示
PLEASE PLUG IN A STEERING WHEEL OR A FORCE FEEDBACK
CONTROLLER(请插入方向盘或力反馈控制器)
这种的 请按照一下说明一次排查。

  1. 可能是缺少一下C++基础库
    这个建议你搜索下Aio runtimes 这是一个检测电脑缺什么基础库的软件 很无脑 不点击 30秒后也会自己安装。
    重新启动Unity 项目查看是否正常运行。

  2. 检查下Logite游戏软件是否检测到方向盘,是否可以正常改键(改一个按键 对应鼠标的右键 在桌面试试 )不正常重新插拔设备,检查驱动。

  3. 在Windows下正常 在Unity测试界面仍然显示 请插入设备 并且拔下设备 重新插入设备 Unity的控制台会输出 Joystick disconnected(“G29 Driving force Racing Wheel”)
    Joystick reconnected(“G29 Driving force Racing Wheel”)这种情况请参考
    罗技官方交流社区 终极解决办法
    简单翻译一下就是 卸载Logitech游戏软件 找到设备管理器(我的电脑右键属性-设备管理器)
    找到 声音、视频和游戏控制器 卸载这里的罗技设备驱动 拔掉设备 重启计算机 完整安装一次 Logitech游戏软件 最后重新插入 罗技方向盘。
    我的5个电脑有3台碰到了这个问题 最后靠这条官方解释修好的。据我猜测可能是因为windows自己安装的驱动会跟Logitech游戏软件的驱动有冲突吧。插入设备的时候Windows会自动帮我们装方向盘的驱动,所以我尝试在离线状态安装 Logitech游戏软件 插入方向盘 最后都好用了。也许是玄学吧。总之这个问题困扰了我2天半的时间 最后终于修好了

接入Unity

Demo的使用方法

场景成功运行会得到 上一章图片一样的结果。这时候我们可以操作方向盘 脚踏板 档杆 来查看这些输入对应哪一个值。
下面还会告诉你 摁 s c d 方向键 等键位调整不同的效果。
到这里 能力强一点的就可以 自己阅读源码 来更改这些数值 然后用到自己的工程中了
这里 我仅列出一些比较重要的,震动等可以自行翻看官方文档(SDK包里面就有)
方向盘 X-axis Position 右32767 初始0 左-32767
油门 Y-axis Position 踩死-32767 初始0 抬起 32767
制动 z-axis rotation 踩死 -32767初始0抬起 32767
离合器 extra axes positions 1 :踩死 -32767初始0抬起 32767
挡杆 button 12 -18 对应1-6挡+倒挡|

力反馈 需要在Logitech游戏软件中 设置-G29-允许在游戏中调节力反馈

在测试中s键开启
源码中是下面这一句
参数1 是设备编号(就是第几个设备,我们就1个方向盘所以是第一个 填0)
参数2是中心位置(Demo里是50 所以你摁下s键 方向盘会自己动。0就是方向盘正中间的位置)
参数3 参数4 你去翻百度也看不懂的 一个是管松紧 一个管力度(大概)
总之你可以调试几次 找到自己满意的值。这里33 28 是我比较满意的手感。

LogitechGSDK.LogiPlaySpringForce(0, 0, 33, 28);

这里Demo中还有好多 可以设置的 比如方向盘的震动等,有需要可以自己一个一个试,参考操作手册。就不一一解释了 关于这方面的博文有好多 基本都是机翻,看个人理解了

接入自己的项目

这里就非常简单了 参考Demo的写法
Awake()或Start()方法中初始化

LogitechGSDK.LogiSteeringInitialize(false)

Update()方法里检测这些输入
这里我倾向进行一次封装 在Update里调用Input()
把检测输入的逻辑写入Input()

Update()
{
  //一些其他需要帧调用的方法
  //TODO
    Input()
   //进行封装 更加工整 更易修改
} 

在Input里进行 设备输入检测

Input(){
       if (LogitechGSDK.LogiUpdate() && LogitechGSDK.LogiIsConnected(0))
          {
           LogitechGSDK.DIJOYSTATE2ENGINES rec;
           rec = LogitechGSDK.LogiGetStateUnity(0);
           //TODO 这里就可以获取 想要的方向盘数据了
          }   
}

if判断直接参考Demo写 就是SDK的帧调用判断设备是否接入
DIJOYSTATE2ENGINES是一个结构体 存储输入设备值的
这里 rec.lx 就直接得到方向盘旋转数据了。(自己对照Demo找)
rec.ly油门 rec.lRz刹车

摁键
方向盘按键的三个方法 按下 抬起 按住 参数1 设备号 参数2 按键号
bool LogiButtonTriggered(int index, int buttonNbr); 按键检测
bool LogiButtonIsPressed(int index, int buttonNbr); 按键释放
bool LogiButtonReleased(int index, int buttonNbr); 按键按下
这里建议使用 按住与抬起做检测,因为我做项目的时候 这个按下检测可能会触发多次 不知道是硬件还是软件的问题。抬起就是触发一次 没有问题

问题与总结

问题

这里说结果我见到的提问

  • 游戏进出 油门 离合 刹车 方向盘 初始值都是0 怎么破 必须动一下才正常。
    你设计一个打火摁键不就好了 这样不仅游戏更真实了,还解决了这个问题。
    其实随便摁一个键子都可以的。

  • 有的时候调试调试 方向盘就不好使了。
    罗技文档里有写,方向盘必须在页面最前端才是好用的(就是那个 初始化 判断那块 )所以有的时候我们 切屏或者打开Unity的控制台 就会这样。因为这个时候Game视图不是最前端的视图了。

  • 力反馈没有
    检查你开没开Logitech游戏软件 设置 允许游戏中调节力反馈 勾选没有(这个软件主要管的就是力反馈这些东西,你可以尝试 在游戏运行过程中 关掉这个软件,方向盘一下子就软了。。。。。)

  • 为什么我开车会翻啊?

  1. 你wheelCollider这块没玩好。很多数值需要调试
  2. 你做的太真实了,现实中你这么开业翻车了

总结

  • 可别再Input.GetButtonDown(“Button3”)
    Input.GetKeyDown(KeyCode.JoystickButton0)
    这样了好么,人家有现成的不用,又蠢又丢人。
  • 这里推荐一篇我觉得写得不错的
    https://blog.csdn/Sakura_Jun/article/details/87718845
  • 开车插件
    Realistic Car Controller
    还请大家支持正版。我就不给大家提供了,网盘见去吧,有什么不明白可以问我 大家共同学习。
  • 插件可能会更新 情况也许会不一样,没准那一天罗技修复了呢。

第一次写 有不对的请赐教,写得不好见谅,我会改进的。

本文标签: 白话方向盘罗技Unity