Unity【XBox One】- 手柄输入的配置与使用

在Unity中使用XBox手柄进行输入的控制管理,首先需要在Project Settings / Input Manager中进行按键的配置,下图是Unity默认的Input Manager配置:

XBox的按键在Unity中的对应关系如下:

using UnityEngine;

namespace SK.Framework
{
    /// <summary>
    /// XBox按键
    /// </summary>
    public class XBox
    {
        /// <summary>
        /// 左侧摇杆水平轴
        /// X axis
        /// </summary>
        public const string LeftStickHorizontal = "LeftStickHorizontal";
        /// <summary>
        /// 左侧摇杆垂直轴
        /// Y axis
        /// </summary>
        public const string LeftStickVertical = "LeftStickVertical";
        /// <summary>
        /// 右侧摇杆水平轴
        /// 4th axis
        /// </summary>
        public const string RightStickHorizontal = "RightStickHorizontal";
        /// <summary>
        /// 右侧摇杆垂直轴
        /// 5th axis
        /// </summary>
        public const string RightStickVertical = "RightStickVertical";
        /// <summary>
        /// 十字方向盘水平轴
        /// 6th axis
        /// </summary>
        public const string DPadHorizontal = "DPadHorizontal";
        /// <summary>
        /// 十字方向盘垂直轴
        /// 7th axis
        /// </summary>
        public const string DPadVertical = "DPadVertical";
        /// <summary>
        /// LT
        /// 9th axis
        /// </summary>
        public const string LT = "LT";
        /// <summary>
        /// RT
        /// 10th axis
        /// </summary>
        public const string RT = "RT";
        /// <summary>
        /// 左侧摇杆按键
        /// joystick button 8
        /// </summary>
        public const KeyCode LeftStick = KeyCode.JoystickButton8;
        /// <summary>
        /// 右侧摇杆按键
        /// joystick button 9
        /// </summary>
        public const KeyCode RightStick = KeyCode.JoystickButton9;
        /// <summary>
        /// A键
        /// joystick button 0
        /// </summary>
        public const KeyCode A = KeyCode.JoystickButton0;
        /// <summary>
        /// B键
        /// joystick button 1
        /// </summary>
        public const KeyCode B = KeyCode.JoystickButton1;
        /// <summary>
        /// X键
        /// joystick button 2
        /// </summary>
        public const KeyCode X = KeyCode.JoystickButton2;
        /// <summary>
        /// Y键
        /// joystick button 3
        /// </summary>
        public const KeyCode Y = KeyCode.JoystickButton3;
        /// <summary>
        /// LB键
        /// joystick button 4
        /// </summary>
        public const KeyCode LB = KeyCode.JoystickButton4;
        /// <summary>
        /// RB键
        /// joystick button 5
        /// </summary>
        public const KeyCode RB = KeyCode.JoystickButton5;
        /// <summary>
        /// View视图键
        /// joystick button 6
        /// </summary>
        public const KeyCode View = KeyCode.JoystickButton6;
        /// <summary>
        /// Menu菜单键
        /// joystick button 7
        /// </summary>
        public const KeyCode Menu = KeyCode.JoystickButton7;
    }
}

根据上面的对应关系,在Input Manager中间配置,例如Left Stick Horizontal,即手柄左侧摇杆的水平轴,对应的Axis为X axis,那么它在Input Manager中的配置如下:

右侧摇杆的垂直轴对应的Axis为5th axis,那么它在Input Manager中的配置如下:

同理进行其他按键的配置:

可直接编辑项目根目录下ProjectSettings文件夹中的InputManager.asset内容,使用以下内容覆盖:

%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!13 &1
InputManager:
  m_ObjectHideFlags: 0
  serializedVersion: 2
  m_Axes:
  - serializedVersion: 3
    m_Name: LeftStickHorizontal
    descriptiveName: 
    descriptiveNegativeName: 
    negativeButton: 
    positiveButton: 
    altNegativeButton: 
    altPositiveButton: 
    gravity: 0
    dead: 0.19
    sensitivity: 1
    snap: 0
    invert: 0
    type: 2
    axis: 0
    joyNum: 0
  - serializedVersion: 3
    m_Name: LeftStickVertical
    descriptiveName: 
    descriptiveNegativeName: 
    negativeButton: 
    positiveButton: 
    altNegativeButton: 
    altPositiveButton: 
    gravity: 0
    dead: 0.19
    sensitivity: 1
    snap: 0
    invert: 1
    type: 2
    axis: 1
    joyNum: 0
  - serializedVersion: 3
    m_Name: A
    descriptiveName: 
    descriptiveNegativeName: 
    negativeButton: 
    positiveButton: 
    altNegativeButton: 
    altPositiveButton: 
    gravity: 0
    dead: 0.001
    sensitivity: 1
    snap: 0
    invert: 0
    type: 0
    axis: 0
    joyNum: 0
  - serializedVersion: 3
    m_Name: B
    descriptiveName: 
    descriptiveNegativeName: 
    negativeButton: 
    positiveButton: joystick button 1
    altNegativeButton: 
    altPositiveButton: 
    gravity: 0
    dead: 0.001
    sensitivity: 1
    snap: 0
    invert: 0
    type: 0
    axis: 0
    joyNum: 0
  - serializedVersion: 3
    m_Name: X
    descriptiveName: 
    descriptiveNegativeName: 
    negativeButton: 
    positiveButton: joystick button 2
    altNegativeButton: 
    altPositiveButton: 
    gravity: 0
    dead: 0.001
    sensitivity: 1
    snap: 0
    invert: 0
    type: 0
    axis: 0
    joyNum: 0
  - serializedVersion: 3
    m_Name: Y
    descriptiveName: 
    descriptiveNegativeName: 
    negativeButton: 
    positiveButton: joystick button 3
    altNegativeButton: 
    altPositiveButton: 
    gravity: 0
    dead: 0.001
    sensitivity: 1
    snap: 0
    invert: 0
    type: 0
    axis: 0
    joyNum: 0
  - serializedVersion: 3
    m_Name: LB
    descriptiveName: 
    descriptiveNegativeName: 
    negativeButton: 
    positiveButton: joystick button 4
    altNegativeButton: 
    altPositiveButton: 
    gravity: 0
    dead: 0.001
    sensitivity: 1
    snap: 0
    invert: 0
    type: 0
    axis: 0
    joyNum: 0
  - serializedVersion: 3
    m_Name: RB
    descriptiveName: 
    descriptiveNegativeName: 
    negativeButton: 
    positiveButton: joystick button 5
    altNegativeButton: 
    altPositiveButton: 
    gravity: 0
    dead: 0.001
    sensitivity: 1
    snap: 0
    invert: 0
    type: 0
    axis: 0
    joyNum: 0
  - serializedVersion: 3
    m_Name: LeftStick
    descriptiveName: 
    descriptiveNegativeName: 
    negativeButton: 
    positiveButton: joystick button 8
    altNegativeButton: 
    altPositiveButton: 
    gravity: 0
    dead: 0.001
    sensitivity: 1
    snap: 0
    invert: 0
    type: 0
    axis: 0
    joyNum: 0
  - serializedVersion: 3
    m_Name: RightStick
    descriptiveName: 
    descriptiveNegativeName: 
    negativeButton: 
    positiveButton: joystick button 9
    altNegativeButton: 
    altPositiveButton: 
    gravity: 0
    dead: 0.001
    sensitivity: 1
    snap: 0
    invert: 0
    type: 0
    axis: 0
    joyNum: 0
  - serializedVersion: 3
    m_Name: View
    descriptiveName: 
    descriptiveNegativeName: 
    negativeButton: 
    positiveButton: joystick button 6
    altNegativeButton: 
    altPositiveButton: 
    gravity: 0
    dead: 0.001
    sensitivity: 1
    snap: 0
    invert: 0
    type: 0
    axis: 0
    joyNum: 0
  - serializedVersion: 3
    m_Name: Menu
    descriptiveName: 
    descriptiveNegativeName: 
    negativeButton: 
    positiveButton: joystick button 7
    altNegativeButton: 
    altPositiveButton: 
    gravity: 0
    dead: 0.001
    sensitivity: 1
    snap: 0
    invert: 0
    type: 0
    axis: 0
    joyNum: 0
  - serializedVersion: 3
    m_Name: LT
    descriptiveName: 
    descriptiveNegativeName: 
    negativeButton: 
    positiveButton: 
    altNegativeButton: 
    altPositiveButton: 
    gravity: 0
    dead: 0.19
    sensitivity: 1
    snap: 0
    invert: 0
    type: 2
    axis: 8
    joyNum: 0
  - serializedVersion: 3
    m_Name: RT
    descriptiveName: 
    descriptiveNegativeName: 
    negativeButton: 
    positiveButton: 
    altNegativeButton: 
    altPositiveButton: 
    gravity: 0
    dead: 0.19
    sensitivity: 1
    snap: 0
    invert: 0
    type: 2
    axis: 9
    joyNum: 0
  - serializedVersion: 3
    m_Name: DPadHorizontal
    descriptiveName: 
    descriptiveNegativeName: 
    negativeButton: 
    positiveButton: 
    altNegativeButton: 
    altPositiveButton: 
    gravity: 0
    dead: 0.19
    sensitivity: 1
    snap: 0
    invert: 0
    type: 2
    axis: 5
    joyNum: 0
  - serializedVersion: 3
    m_Name: DPadVertical
    descriptiveName: 
    descriptiveNegativeName: 
    negativeButton: 
    positiveButton: 
    altNegativeButton: 
    altPositiveButton: 
    gravity: 0
    dead: 0.19
    sensitivity: 1
    snap: 0
    invert: 1
    type: 2
    axis: 6
    joyNum: 0
  - serializedVersion: 3
    m_Name: RightStickHorizontal
    descriptiveName: 
    descriptiveNegativeName: 
    negativeButton: 
    positiveButton: 
    altNegativeButton: 
    altPositiveButton: 
    gravity: 0
    dead: 0.19
    sensitivity: 1
    snap: 0
    invert: 1
    type: 2
    axis: 3
    joyNum: 0
  - serializedVersion: 3
    m_Name: RightStickVertical
    descriptiveName: 
    descriptiveNegativeName: 
    negativeButton: 
    positiveButton: 
    altNegativeButton: 
    altPositiveButton: 
    gravity: 0
    dead: 0.19
    sensitivity: 1
    snap: 0
    invert: 1
    type: 2
    axis: 4
    joyNum: 0

附上XBox的按键说明:

测试脚本:

using UnityEngine;
using SK.Framework;

public class Example : MonoBehaviour
{
    private void Update()
    {
        if (Input.GetKeyDown(XBox.A)) Debug.Log("A"); 
        if (Input.GetKeyDown(XBox.B)) Debug.Log("B");
        if (Input.GetKeyDown(XBox.X)) Debug.Log("X");
        if (Input.GetKeyDown(XBox.Y)) Debug.Log("Y");
        if (Input.GetKeyDown(XBox.LB)) Debug.Log("LB");
        if (Input.GetKeyDown(XBox.RB)) Debug.Log("RB");
        if (Input.GetKeyDown(XBox.View)) Debug.Log("View");
        if (Input.GetKeyDown(XBox.Menu)) Debug.Log("Menu");

        float lh = Input.GetAxis(XBox.LeftStickHorizontal);
        float lv = Input.GetAxis(XBox.LeftStickVertical);
        float rh = Input.GetAxis(XBox.RightStickHorizontal);
        float rv = Input.GetAxis(XBox.RightStickVertical);
        float lt = Input.GetAxis(XBox.LT);
        float rt = Input.GetAxis(XBox.RT);
        float dPadH = Input.GetAxis(XBox.DPadHorizontal);
        float dPadV = Input.GetAxis(XBox.DPadVertical);

        if (lh != 0) Debug.Log($"LH:{lh}");
        if (lv != 0) Debug.Log($"LV:{lv}");
        if (rh != 0) Debug.Log($"RH:{rh}");
        if (rv != 0) Debug.Log($"RV:{rv}");
        if (lt != 0) Debug.Log($"LT:{lt}");
        if (rt != 0) Debug.Log($"RT:{rt}");
        if (dPadH != 0) Debug.Log($"DPadH:{dPadH}");
        if (dPadV != 0) Debug.Log($"DPadV:{dPadV}");
    }
}
Unity Enviro 3是一个强大的Unity插件,用于创建逼真且动态的天空和天气效果。它提供了多种功能和选项,能够帮助开发者更好地控制和定制游戏中的天空和天气。 首先,Unity Enviro 3允许开发者创建多种类型的天空,如蓝天、晴天、夜晚、日落、日出等。用户可以通过调整各种参数来实现不同的效果,如云层的位置和密度、雾和雾霾的浓度、星星的亮度等。这些参数可以根据场景需求进行微调,使得天空看起来更加真实且与游戏世界相匹配。 其次,该插件还提供了不同类型的天气效果,如雨、雪、雷电等。开发者可以通过简单的几步配置,实现这些天气效果的切换和控制。用户可以设置降雨量、雨滴大小、雨滴速度等参数,以及设置下雪的强度和速度。通过这些设置,游戏中的天气将呈现出逼真的效果,增加了气氛和乐趣。 此外,Unity Enviro 3还支持时间周期的模拟,用户可以按照自己的设定来控制游戏中的时间流逝。用户可以设置时间的速度和方向,自定义日出和日落的时间,甚至可以模拟四季的变化。这些功能可以使得游戏的场景更加生动,增强玩家的沉浸感。 总的来说,Unity Enviro 3是一个功能丰富且易于使用的插件,可用于创建逼真而吸引人的天空和天气效果。无论是在开放世界游戏、角色扮演游戏还是射击游戏中,它都能够为玩家带来更加真实和令人愉悦的游戏体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CoderZ1010

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值