守候_海阔天空

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

转载请注明出处。

-------------------------------------------------------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处的样子。以下是演示图:

posted on 2015-09-18 15:50  守候_海阔天空  阅读(1480)  评论(3)    收藏  举报