转载请注明出处。
-------------------------------------------------------2015/9/18
前些天写了关于wii控制器控制,但是wii毕竟是2006年的产品,蓝牙使用距离有线。在实际使用过程中灵敏度不够。红外使用容易不容易补货到,索性换成了鼠标。但是新的问题来了,要支持多人互动的化,需要双鼠标。所以研究之下搞了个支持双鼠标的应用。
索性上图了。

------------------------------------------------------------------------------------------------
Demo下载:http://pan.baidu.com/s/1hq3zF8o
插件下载:http://pan.baidu.com/s/1ntH2IOL
------------------------------------------------------------------------------------------------
使用介绍:
在各位使用的时候请注意,会产生一个wf窗口做为后台,所以关闭的时候请判断是否wf被关闭了。如果发现在使用过程中Unity3d出现假死,请用任务管理器关闭。
通常情况下正确调用DeInvoke函数是会释放捕获鼠标的服务的。以上现象只会出现在Editor中,发布则没有任何情况。
-----------------------------------------------------------------------------------------------
1.只有一个类,请保证其在一个没被禁用的物体上。
Enable On Start 勾选则表示一开始就监听多个鼠标。
ICO 请务必填写,表示最多有几个鼠标,并且1#、2#等鼠标所对应的图标是与ICO数组想对应的图片,这里没有限制图片大小,所以请尽量制作规整的贴图吧。

2、功能部分
// 初始化信息,如果没有勾选在开始的时候启动,则需要在需要多鼠标支持的时候调用 // 调用后Unity3d的鼠标会消失不见,取而代之的是在ICO中赋值的图标 MulitpleMouse.OnInvoke(); // 卸载函数,请在场景进行不需要的多鼠标支持的时候调用 // 调用后,图标消失,原有鼠标将显示 MulitpleMouse.DeInvoke(); // 以屏幕左上角为(0,0)获取鼠标所在位置 MulitpleMouse.GetMousePosZeroOnLeftTop(int witch); // 以屏幕左下角为(0,0)获取鼠标位置,通常用于射线检测 MulitpleMouse.GetMousePosZeroOnLeftButtom(int witch); // 当前鼠标最大支持个数,实际上这个是有ICO.length决定 MulitpleMouse.MiceCount; // 设置鼠标样式 MulitpleMouse.SetCurICO(int witch,Texture2D cur); // 获取鼠标的点击状态 返回的是一个bool值 // 参数一:哪个鼠标的状态 // 参数二: 哪个按钮(目前只支持两个按钮0,1);0代表左键,1代表右键 MulitpleMouse.OnMouseButton(int withch,int button);
------------------------------------------------------------------------------------------------2015.9.22 对NGUI事件处理(提供下载的地方并没有新增,以下仅且提供方向,由于提供的插件是在windows下跑所以这个也只能是windows下的NGUI)
还是提一下吧。在MulitpleMouse中增加了一个静态变量用来判断是否启用了多鼠标模式。名为Awake.IsReleaseMem,在OnInvoke函数中设为false,DeInvoe 设为true。
有了这个在UICamera 下新增一个函数:
public static Vector3 GetMulipleMousePos() { Vector3 pos = Input.mousePosition; try { // 支持多鼠标方案 if (!MulitpleMouse.IsReleaseMem) { pos = MulitpleMouse.GetMousePosZeroOnLeftButtom(0); } } catch (System.Exception ex) { Debug.Log("由于多鼠标支持模块错误,UI方案失效"); } return pos; }
完成之后,在相应的地方进行增加事件。需求说明,增加的NGUI事件处理仅仅支持第一个鼠标的事件。(如果需要多鼠标事件,还需要扩展。请根据现有提供代码自行扩展了)
使用va 进行了替换。不费神。等有bug的时候在解决吧。


凡是用到了Input.mouseposition的地方进行了替换。大概5-6处的样子。以下是演示图:


浙公网安备 33010602011771号