unity硬件接入(一)---Joystick
本人测试罗技方向盘在unity中的使用情况,由于是摸索途中,也有好多的东西不熟悉,见请指点,谢谢
unity环境及插件
使用版本unity2021.3.16f1c1
插件 SharpDx,SharpDx.DirecInput
正式使用
获取设备列表
public static void GetHDW()
{
var dirInput = new SharpDX.DirectInput.DirectInput();
var allDevices = dirInput.GetDevices();
foreach (var item in allDevices)
{
Debug.Log($"获取到硬件:<color=red>{item.ProductName}</color>");
Joystick HDWdata = new SharpDX.DirectInput.Joystick(dirInput, item.InstanceGuid);
HDWdata.Properties.AxisMode = SharpDX.DirectInput.DeviceAxisMode.Absolute;
if (device.ContainsKey(item.ProductName)) continue;
device.Add(item.ProductName, HDWdata);
HDWdata.Acquire();
}
}
获取指定设备的当前数据
public static void ChooseInputUpdate()
{
if (device.ContainsKey(ChooseInputType))
{
state= device[ChooseInputType].GetCurrentState();
}
}
存储按键点击状态
声明列表或者数组存储当前上一帧的按钮状态,判定按钮是否按下,按住,抬起
- 判定按钮是否抬起
public static bool GetKeyUp(int key)
{
if (UpClick.Contains(key))
{
if (!state.Buttons[key])
{
return true;
}
}
return false;
}
- 判定按钮是否按下
public static bool GetKeyDown(int key)
{
if (!UpClick.Contains(key))
{
if (state.Buttons[key])
{
return true;
}
}
return false;
}
- 判定按钮是否按住
public static bool GetKey(int key)
{
if (state.Buttons[key])
{
return true;
}
return false;
}
- 当前按钮存储刷新
public static void ResetButton()
{
UpClick.Clear();
for (int i = 0; i < state.Buttons.Length; i++)
{
if (state.Buttons[i])
{
UpClick.Add(i);
}
}
}
问题记录及优化
1.未知原因导致的设备名尾部出现很多“\0”,导致按照字符串无法正常获取到指定设备
获取到的设备名字符串进行trim标准化