转载请注明出处。
-------------------------------------------------------2015/9/15
公司做模拟操作,需要用到一些外设。Wii控制器(后简称wiimote)、含有陀螺仪、键位、红外(IR)、蓝牙、等优秀“基因”。用来模拟场景做射线检测,或者重力游戏在适合不过。
一、硬件篇:在连接设备的时候回提示重启电脑,提示好关闭和保存好工程。
1、蓝牙模块(推荐2.0、虽然已经有更高版本但是毕竟几年前的东西,考虑兼容也还是选择2.0.)

2、wiimote

------------------------------------------------理论上有这两个东西就可以工作了,但根据不同需求,以下外设可选。
3、红外接收器[可选,无论usb-a,usb-b均可]
说明:本红外设备还有一个usb的口子,刚开始我以为是用来传输数据的,其实不是,只是供电,所以不管是原生wii的红外接收器,还是某宝上购买的usb-a的那种常规均可,只要能为其供电。我这里选用usb-a的

4、controller[可选]由于手柄上具备controller功能,加上项目部需要,所以这里没有选购也不涉及,如有问题,请自行克服。

二、连接篇
1、首先安装蓝牙驱动,如果购买的蓝牙有自带驱动和连接程序,可以不参考这篇文章,截止本书书写采用系统是win7,64bit
推荐IVT的蓝牙驱动,附上连接,这里。
安装完成后先不要着急重启,然后运行客户端:
a,同时按住,wiimote的 ①②键,开启手柄蓝牙。
b,启动客户端搜索设备
c,当搜索到设备后点右键搜索到的手柄,点搜索服务。
d,完成搜索服务后,选择蓝牙人机输入。等待连接,当连接成功后,会自动安装手柄驱动文件。安装完成后,会提示重启电脑,那就重启吧。

建立好连接后基本上就完成了大部分工作,以下工作我就提供国外找到的开发包吧。里面是一些C++到处来的类,但是使用者无需担心。已经有人为我们处理好了逻辑。
---------------------------------------------------------------------------------------------
开发篇:这里其实我需要将的很少,几乎没有,提一下就行,折腾硬件才是乐趣所在。下载以下package
1、控制类:wiiMote,不装逼,反正这个对象随便申明,就算你申明再多其实成员函数都是一个功能。
void Start () { wiiMote wiiControllerListener; wiiControllerListener = new wiiMote(); // 然后就可以无节操的获取到控制器的任何东西了 float _x = wiiControllerListener.getIrX(0); float _y = wiiControllerListener.getIrY(0); }
2.讲以下控制器中包含的函数
// 控制器开始 wiimote_start() // 释放控制器,在OnApplicationQuit调用,或者不需要使用控制器时调用 wiimote_stop() // 获取当前控制器连接个数 int wiimote_count() // 获取控制器是否可用,参数是控制器索引,第一个控制器为0 bool wiimote_available( int which ) // 判断控制器是否已经开启红外检测功能 bool wiimote_isIRenabled( int which ) // 开启控制器的红外设备 bool wiimote_enableIR( int which ) // 是否有扩展输入设备,即上诉设备中第四个扩展控制器 bool wiimote_isExpansionPortEnabled( int which ) // 让wii震动 // 参数一:震动的手柄是哪个? // 参数二:震动的时间是多长(秒为单位) wiimote_rumble( int which, float duration) // 获取电量 double wiimote_getBatteryLevel( int which ) // 获取各个轴的加速度,提醒这里用的是byte,范围因此是0-255 byte wiimote_getAccX(int which) byte wiimote_getAccY(int which) byte wiimote_getAccZ(int which) // 获取旋转,这里需要你把wii放平,然后横向的渲染 float wiimote_getRoll(int which) // 获取wii所在的最高点 float wiimote_getPitch(int which) // 获取红外方向-1,1 float getIrX(int which); float getIrY(int which);

浙公网安备 33010602011771号