在unity中可能会用到外部的设备,比如是游戏手柄,赛车的方向盘手柄,在unity中 input manger中最多可以获取到10个按键,但是就像赛车的游戏手柄可能在电脑pc上可以显示,但是在unity中就获取不到了。那我们只能用其他的方法来解决这个问题了。
- using UnityEngine;
- using System.Collections;
- using System.Runtime.InteropServices;
- public class JoystickController : MonoBehaviour {
- public struct JOYINFOEX
- {
- /// <summary>
- /// Size, in bytes, of this structure.
- /// </summary>
- public int dwSize;
- /// <summary>
- /// Flags indicating the valid information returned in this structure. Members that do not contain valid information are set to zero.
- /// </summary>
- public int dwFlags;
- /// <summary>
- /// Current X-coordinate.
- /// </summary>
- public int dwXpos;
- /// <summary>
- /// Current Y-coordinate.
- /// </summary>
- public int dwYpos;
- /// <summary>
- /// Current Z-coordinate.
- /// </summary>
- public int dwZpos;
- /// <summary>
- /// Current position of the rudder or fourth joystick axis.
- /// </summary>
- public int dwRpos;
- /// <summary>
- /// Current fifth axis position.
- /// </summary>
- public int dwUpos;
- /// <summary>
- /// Current sixth axis position.
- /// </summary>
- public int dwVpos;
- /// <summary>
- /// 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.
- /// </summary>
- public int dwButtons;
- /// <summary>
- /// Current button number that is pressed.
- /// </summary>
- public int dwButtonNumber;
- /// <summary>
- /// 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.
- /// </summary>
- public int dwPOV;
- /// <summary>
- /// Reserved; do not use.
- /// </summary>
- public int dwReserved1;
- /// <summary>
- /// Reserved; do not use.
- /// </summary>
- public int dwReserved2;
- };
- [DllImport("winmm")] public static extern int joyGetPosEx(int uJoyID, ref JOYINFOEX pji);
- private JOYINFOEX infoEx;
- private string currentButton;
- private string currentAxis;
- private float axisInput;
- // Use this for initialization
- void Start () {
- //Device joystickDevice;
- //JoystickState state;
- infoEx = new JOYINFOEX();
- infoEx.dwSize = Marshal.SizeOf(typeof(JOYINFOEX));
- infoEx.dwFlags=0x00000080;
- }
- // Update is called once per frame
- void Update ()
- {
- getButton();
- }
- /// <summary>
- /// get the button data of the joystick
- /// </summary>
- void getButton()
- {
- int e = joyGetPosEx(0,ref infoEx);
- if (e==0)
- {
- int mask=0x10;
- string str = string.Empty;
- for(int i=5;i<32;i++)
- {
- if ((infoEx.dwButtons & mask) > 0)
- {
- str = str + string.Format("button({0})",i);
- }
- mask = mask << 1;
- }
- Debug.Log(str);
- }
- }
- }
这样就可以全部获取到在pc上可以显示按键。