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调用外接摄像头的实例代码(C#)

using UnityEngine; using System.Collections; using System.Threading; public class BtnControl : Mono...

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

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

Unity3d 与罗技G29交互

刚做完一个Unity3d搭配罗技G29开发的赛车游戏,对于罗技最开始并不熟悉,在网上能找的资料也非常少,特别是G29交互这一块,数据不好检测,我这里把逻辑比较难检测的几个地方做一个分享! 一:踏板数...
  • wuyf88
  • wuyf88
  • 2017年04月01日 10:58
  • 2006

Unity连接罗技G27方向盘

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

Unity3D技术之键盘、操纵杆和游戏手柄输入实现详解

输入桌面 Unity 支持键盘、操纵杆和游戏手柄输入。 可以在输入管理器 (Input Manager) 中创建虚拟轴和按钮,终端用户可以在简洁美观的配置对话框中配置键盘。   您...

这篇说的是Unity Input。输入控制器

这篇说的是Unity Input。输入控制器 关于Unity3D是什么。我就不多做解释了。由于工作原因,该系列原创教程不定期更新。每月必然有更新。谢谢各位 Unity Input---...

Unity打包运行异常

发布项目时,在U3D中可以运行,但是打包成exe包的时候,有些功能运行不了,打开调试时发现是报异常:DllNotFoundException:LogitechSteeringWheel.dll ,当时...
  • wuyf88
  • wuyf88
  • 2017年04月01日 10:22
  • 304

unity实现判断手指是否顺时针滑动实现简单的方向盘效果

首先定义用到的值: Vector3[]  cons=new Vector3[4]; Vector3[]  fanhuibtn=new Vector3[4];//返回button的四个角 Vector3...
  • CCAL16
  • CCAL16
  • 2016年11月03日 21:25
  • 634

罗素:大胆释放你的欲望(洞察人性最深的一篇文章)!

罗素在推动20世纪的西方走向自由化、多元化的历史进程中,功勋卓着。被誉于20世纪最伟大的哲学家、社会学家,本文是他在1950年被授予诺贝尔文学奖时的演讲,看看这位自由主义BOSS级人物对人类社会中的荣...

信念、思考、行动-谈谈程序员返回家乡的创业问题

转载自:http://www.cnblogs.com/xiaotie/p/3537813.html 昨天晚上在微博上看了篇 《为什么现在很多年轻人愿意来北上广深打拼,即使过得异常艰苦...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:unity基础开发----unity获取外部设备(方向盘)按键
举报原因:
原因补充:

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