unity基础开发----unity获取外部设备(方向盘)按键

转载 2015年07月09日 13:36:22

在unity中可能会用到外部的设备,比如是游戏手柄,赛车的方向盘手柄,在unity中 input manger中最多可以获取到10个按键,但是就像赛车的游戏手柄可能在电脑pc上可以显示,但是在unity中就获取不到了。那我们只能用其他的方法来解决这个问题了。

[csharp] view plaincopy在CODE上查看代码片派生到我的代码片
  1. using UnityEngine;  
  2. using System.Collections;  
  3. using System.Runtime.InteropServices;  
  4.   
  5. public class JoystickController : MonoBehaviour {  
  6.   
  7.   
  8. public struct JOYINFOEX  
  9. {  
  10. /// <summary>  
  11. /// Size, in bytes, of this structure.  
  12. /// </summary>  
  13. public int dwSize;  
  14. /// <summary>  
  15. /// Flags indicating the valid information returned in this structure. Members that do not contain valid information are set to zero.  
  16. /// </summary>  
  17. public int dwFlags;  
  18. /// <summary>  
  19. /// Current X-coordinate.  
  20. /// </summary>  
  21. public int dwXpos;  
  22. /// <summary>  
  23. /// Current Y-coordinate.  
  24. /// </summary>  
  25. public int dwYpos;  
  26. /// <summary>  
  27. /// Current Z-coordinate.  
  28. /// </summary>  
  29. public int dwZpos;  
  30. /// <summary>  
  31. /// Current position of the rudder or fourth joystick axis.  
  32. /// </summary>  
  33. public int dwRpos;  
  34. /// <summary>  
  35. /// Current fifth axis position.  
  36. /// </summary>  
  37. public int dwUpos;  
  38. /// <summary>  
  39. /// Current sixth axis position.  
  40. /// </summary>  
  41. public int dwVpos;  
  42. /// <summary>  
  43. /// Current state of the 32 joystick buttons. The value of this member can be set to any combination of JOY_BUTTONn flags, where n is a value in the range of 1 through 32 corresponding to the button that is pressed.  
  44. /// </summary>  
  45. public int dwButtons;  
  46. /// <summary>  
  47. /// Current button number that is pressed.  
  48. /// </summary>  
  49. public int dwButtonNumber;  
  50. /// <summary>  
  51. /// Current position of the point-of-view control. Values for this member are in the range 0 through 35,900. These values represent the angle, in degrees, of each view multiplied by 100.  
  52. /// </summary>  
  53. public int dwPOV;  
  54. /// <summary>  
  55. /// Reserved; do not use.  
  56. /// </summary>  
  57. public int dwReserved1;  
  58. /// <summary>  
  59. /// Reserved; do not use.  
  60. /// </summary>  
  61. public int dwReserved2;  
  62. };  
  63.       
  64. [DllImport("winmm")] public static extern int joyGetPosEx(int uJoyID, ref JOYINFOEX pji);  
  65. private JOYINFOEX infoEx;     
  66.     private string currentButton;  
  67.     private string currentAxis;  
  68.     private float axisInput;  
  69.     // Use this for initialization  
  70.     void Start () {  
  71.          //Device joystickDevice;  
  72.          //JoystickState state;  
  73.         infoEx = new JOYINFOEX();  
  74.         infoEx.dwSize = Marshal.SizeOf(typeof(JOYINFOEX));  
  75.         infoEx.dwFlags=0x00000080;  
  76.     }  
  77.       
  78.     // Update is called once per frame  
  79.     void Update ()   
  80.     {  
  81.         getButton();  
  82.           
  83.       
  84.     }  
  85.     /// <summary>  
  86.     /// get the button data of the joystick  
  87.     /// </summary>  
  88.     void getButton()  
  89.     {  
  90.           
  91.           
  92.         int e = joyGetPosEx(0,ref infoEx);  
  93.         if (e==0)  
  94.         {  
  95.             int mask=0x10;  
  96.             string str = string.Empty;  
  97.             for(int i=5;i<32;i++)  
  98.             {  
  99.                 if ((infoEx.dwButtons & mask) > 0)  
  100.                 {  
  101.                     str = str + string.Format("button({0})",i);  
  102.                 }  
  103.                 mask = mask << 1;  
  104.             }  
  105.             Debug.Log(str);  
  106.         }  
  107.       
  108.     }  
  109. }  

这样就可以全部获取到在pc上可以显示按键。

相关文章推荐

亲测成功 unity直连android真机测试

更新 2017/06/29今天用Unity5.3.6发现一个简单的方法,在打APK的时候勾选如图两项,打出来的包装在手机用数据线或WIFI连接unity的Profile,只要在手机上运行游戏Unity...

unity基础开发----unity获取外部设备(方向盘)按键

在unity中可能会用到外部的设备,比如是游戏手柄,赛车的方向盘手柄,在unity中 input manger中最多可以获取到10个按键,但是就像赛车的游戏手柄可能在电脑pc上可以显示,但是在unit...

Unity连接罗技G27方向盘

年初的时候一直打算买个游戏方向盘玩赛车游戏,但受限于收入水平和还贷压力只能作罢。 最近公司要给别人做个demo,终于有机会接触到了这个东西。 这次测试用的是G27,之前我只在天猫上看到过G29,也...

02_Unity3D的输入(Input)——移动设备输入

fingerId 手指索引 摸的唯一索引 position 位置 触摸屏幕的位置 deltaPosition  增量位置 自最后一帧改变的屏幕位置 delta...

Unity中的输入

移动平台的输入 触摸 触摸相关的函数 触摸的一个示例 重力加速器 在Unity中访问重力加速器的信息 重力加速器示例 虚拟键盘 其他输入 传统的输入 鼠标键盘控制杆手柄 虚拟控制轴Virtual Ax...

Unity3d中制作Loading场景进度条所遇到的问题

背景 通常游戏的主场景包含的资源较多,这会导致加载场景的时间较长。为了避免这个问题,可以首先加载Loading场景,然后再通过Loading场景来加载主场景。因为Loading场景包含的资源较少...

普及面向服务架构SOA软件的关键是标准化

普及面向服务架构SOA软件的关键是标准化      内容提要:跨平台互联互通互操作是当今信息...

Unity 协程使用指南

使用Unity的过程中,对协程只知道如何使用,但并不知道协程的内部机理,对于自己不清楚的部分就像一块大石压力心里,让自己感觉到担忧和不适。这篇文章一探究竟,彻底揭开协程的面纱,让大家在使用中不再有后顾...

Unity3D Spine 跳转

只是碰到,亲测可以这样解决,但可能并不shiyon
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)