有选择地控制鼠标输入设备

时间:2012-06-16 06:32:15

标签: windows unity3d multipoint

我想为Windows开发一个多鼠标输入工具,能够有选择地控制单个鼠标设备。我还想跟踪禁用了单击事件的设备的MouseMove事件并显示指针。

我所知道的最接近的现有解决方案(对于Win7)是TeamPlayer,但它缺乏将控制权限制为单个鼠标(或自定义光标图像)的功能,而是通过左键单击自由转移控制。我尝试通过DeviceID手动禁用设备,但一旦重新启用,TeamPlayer将无法识别它们。此外,我的许多鼠标设备都具有相同的DeviceID。

我一直在考虑微软的MultiPoint SDK,已经使用MultiPoint TUIO(MultiPoint SDK的多点触控TUIO框架模拟器)和Mindstorm的Unity3D-TUIO在Unity3D中开发了交互式多鼠标游戏。

MultiPoint TUIO使用MultiPoint覆盖窗口并将TUIO消息发送到底层目标窗口。但是,我发现这种方法存在问题(即路由MultipointMouseEvents)来控制非MultiPoint窗口中的指针。例如,单击事件将使焦点远离MultiPoint窗口,将控制权返回给所有输入设备。

有人能提出更好的方法吗?

更新

关于在Unity中使用MultiPoint,我发现适应MultiPoint TUIO过度杀伤但使用相同的方法。

我创建了一个应用程序(在WPF中),它实现了一个UDP服务器和一个用MultiPoint注册的透明窗口,它将自己定位和调整大小以完全覆盖Unity窗口。 [注意:您必须在Unity Player设置中启用“在后台运行”。]

然后,我将MultiPoint鼠标位置和事件流式传输到Unity中的UdpClient接收器,在一个名为MultiPointInput的类中,它跟踪静态成员中的状态。然后,使用MultiPointInput.mousePosition(mouseID)(类似于Input.mousePosition)访问特定的鼠标位置。

我已经成功地在教室里使用了15-20只无线鼠标。 SDK非常稳定,但使用多个无线鼠标(变化范围和干扰)时存在潜在的硬件问题。

2 个答案:

答案 0 :(得分:1)

我正在寻找检测来自多个鼠标输入的输入的方法,并且找不到任何容易做的有用的东西。我一直碰到这个Multipoint SDK,但似乎它已经死了很长一段时间,或者它可能永远不存在 - 几乎没有人记录任何用法。

我还找到了尝试捕获原始输入数据的建议,我发现了这个: http://www.codeproject.com/Articles/17123/Using-Raw-Input-from-C-to-handle-multiple-keyboard

据说可以在非常低的水平上单独管理键盘设备,但我不知道如何实现这样的任何东西。你尝试过类似的东西吗?你能否提出任何反馈,为什么/为什么其他人不应该继续这样做呢?

另外,您是否可以提供有关TUIO解决方案可管理性的更多详细信息?我目前正试图弄清楚我的团结游戏,我需要多个鼠标单独的移动输入。

更新:我使用了SDG工具包: http://grouplab.cpsc.ucalgary.ca/cookbook/index.php/Toolkits/SDGToolkit 用于读取多个鼠标输入并证明它是成功的。我不得不乱用它一段时间,但终于让它工作了,我将我的应用程序基于他们提供的最简单的示例应用程序。我基本上将套接字服务器/客户端项目与此SDG应用程序相结合。服务器是我的Unity游戏,客户端就是应用程序,每次鼠标移动都会发送数据。

有趣的是它在我试过的任何其他计算机上都没有用,我无法弄清楚我实际做了什么让它在我的工作。我测试了很多关于服务器/客户端无法工作的原因,实际上是SDG的东西对其他人不起作用。基本上,我错误地把2007(并且几乎死了)的图书馆假装它应该是绝对可靠的。

无论如何,如果有人(读:solus:D)想要给这个SDG一段时间,并检查它是否对他们有用,那就太棒了。该库看起来直观,简单,高效。唯一的问题是,由于一些奇怪的原因它不起作用。

答案 1 :(得分:0)

如果您正在为Unity寻找即用型多平台库,那么您可能对多输入感兴趣:https://www.assetstore.unity3d.com/en/#!/content/59967 - 它支持同时连接的多个鼠标,键盘和打击垫