Skip to content

如何响应手柄的交互

判断当前是否是手柄交互模式

csharp
if (InputSystem.Instance.controllerType == ControllerType.Controllers)
{
    //开发者逻辑
}

手柄类型

目前只支持右手柄的交互

csharp
public enum HandType
{
    Left,
    Right,
}

获取手柄生命状态

手柄生命状态包括配对(绑定)状态,连接状态和手柄电量。

  • 使用者可以通过注册回调方式,监听手柄生命状态的变化
csharp
HandleControllerManager.Instance.InitRegistration(
    UpdateBinding, UpdateConnection, UpdatePowerStats
);

private void UpdateBinding(HandType handType, bool status)
{
    Debug.Log("绑定状态改变");
}

private void UpdateConnection(HandType handType, bool connected)
{
    Debug.Log("连接状态改变");
}

private void UpdatePowerStats(HandType handType, float power)
{
    Debug.Log("电量改变");
}
  • 使用者也可以直接查询手柄当前的生命状态
csharp
/// <summary>
/// 获取手柄绑定状态
/// </summary>
bool status = HandleControllerManager.Instance.GetBindState(HandType.Right);

/// <summary>
/// 获取手柄连接状态
/// </summary>
bool connected = HandleControllerManager.Instance.GetConnectState(HandType.Right);

/// <summary>
/// 获取手柄电量
/// </summary>
float power = HandleControllerManager.Instance.GetPowerStats(HandType.Right);

手柄按键事件

按键类型

csharp
public enum HandleKeyCode
{
    Home,        // Home键
    Return,      // 返回键
    Primary,     // A / X键
    Secondary,   // B / Y键
    Rocker,      // 摇杆键
    Trigger,     // 扳机键
    Grid         // 侧边键
}

按键接口

csharp
/// <summary>
/// 手柄按键是否按下
/// </summary>
/// <param name="handType">手柄类型</param>
/// <param name="keyCode">按键类型</param>
/// <returns></returns>
public bool GetButtonDown(HandType handType, HandleKeyCode keyCode)

/// <summary>
/// 手柄按键是否弹起
/// </summary>
/// <param name="handType">手柄类型</param>
/// <param name="keyCode">按键类型</param>
/// <returns></returns>
public bool GetButtonUp(HandType handType, HandleKeyCode keyCode)

/// <summary>
/// 手柄按键是否按住
/// </summary>
/// <param name="handType">手柄类型</param>
/// <param name="keyCode">按键类型</param>
/// <returns></returns>
public bool GetButton(HandType handType, HandleKeyCode keyCode)

摇杆接口

csharp
/// <summary>
/// 获取手柄摇杆坐标
/// </summary>
/// <param name="handType">手柄类型</param>
/// <returns>坐标范围从左下角[-1,-1]到右上角[1,1],复位为[0,0]</returns>
public Vector2 GetAxis2D(HandType handType)

手柄控制事件

震动控制

csharp
/// <summary>
/// 手柄震动
/// </summary>
/// <param name="handType">手柄类型</param>
/// <param name="level">震动等级 1-8</param>
/// <param name="time">震动时长 0-65535 ms</param>
public bool VibrateHandle(HandType handType, int level, int time)