📜  使用播放器输入管理器统一连接所有设备 - C# (1)

📅  最后修改于: 2023-12-03 15:22:24.204000             🧑  作者: Mango

使用播放器输入管理器统一连接所有设备 - C#

Introduction

播放器输入管理器(Input Manager)是Unity3D编辑器中的一个功能强大的工具,用于管理输入源设备(如键盘、鼠标、控制器等)。使用该工具,您可以轻松地定义和配置您的游戏的输入控制,以及使用同一种方式来处理所有输入源设备的输入。

在本教程中,我们将介绍如何使用C#编写代码,实现使用播放器输入管理器来统一连接所有设备的功能。通过本教程,您将了解:

  1. 如何使用播放器输入管理器来定义输入控制器。
  2. 如何使用C#编写代码监测和处理输入控制器的输入。
  3. 如何使用控制器输入的输入数据来控制游戏对象的行为。
Prerequisites

在开始之前,您需要:

  1. 一台安装了Unity3D的计算机。
  2. 一些基本的C#编程知识。
  3. 了解Unity3D中的基本游戏对象和场景设置。
Step 1: 创建新的Unity场景

首先,我们需要创建一个新的Unity场景。在Unity编辑器中,打开“File”-“New Scene”,选择一个场景类型,并创建一个新的场景。

Step 2: 创建空的Game Object

在新创建的场景中,我们需要创建一个空的Game Object。单击场景视图中的“Create”按钮,并选择“Create Empty”选项。一个空的Game Object将被创建。

Step 3: 创建Player Controller

接下来,我们需要使用播放器输入管理器来创建一个新的Player Controller。单击“Edit”按钮,选择“Project Settings”-“Input”。在播放器输入管理器中,我们可以定义和配置我们的玩家控制。

点击“+”按钮,创建一个新的输入控制器。为输入控制器定义一个名称,如“Player Controller”,并设置它的输入类型为“Joystick Axis”。您可以在“Joy Num Axes”下设置控制器的轴数。在这个例子中,我们使用三个轴来控制游戏对象的移动。

接下来,为每个输入轴定义一个名称。在“Axis”属性下,为第一个轴定义一个名称,例如“Horizontal”。设置该轴的“Positive Button”和“Negative Button”,并设置轴的最小值和最大值。

在“Joy Num Buttons”中选择“8”,因为我们将使用八个按钮来控制游戏对象的行为。为每个按钮定义一个名称,并设置它们的“Positive Button”和“Negative Button”。

完成所有设置后,单击“Apply”按钮,保存您的输入控制器。

Step 4: 编写C#代码

现在,我们需要编写C#代码,以便我们的玩家控制器可以与游戏对象交互并控制其行为。

首先,我们需要在顶部添加一个namespace:

using UnityEngine.InputSystem;

现在,我们需要定义一个类,并从Monobehaviour类继承:

public class PlayerController : MonoBehaviour
{
    ...
}

我们还需要定义一个私有的InputAction对象作为我们的输入控制器:

private InputAction playerInput;

为了初始化输入控制器,我们需要添加Start()方法:

void Start()
{
    playerInput = new InputAction("Player Control", InputActionType.PassThrough);
    playerInput.AddBinding("<Gamepad>/leftStick");
    playerInput.AddBinding("<Keyboard>/a");
    playerInput.Enable();
}

在上面的代码中,我们创建了一个新的“Player Control”输入控制器,并将其类型设置为“PassThrough”。我们通过调用AddBinding()方法,将“Left Stick”和“A”键绑定到输入控制器上。最后,我们调用Enable()方法,以使输入控制器处于活动状态。

下一步是实现Update()方法来监测输入控制器的输入,并使游戏对象移动:

void Update()
{
    var move = playerInput.ReadValue<Vector2>();
    transform.position += new Vector3(move.x, 0, move.y) * Time.deltaTime;
}

在上面的代码中,我们首先使用ReadValue()方法读取输入控制器的输入数据。然后,我们将move向量(x和y方向的输入值)乘以deltaTime,以便我们可以通过时间来平滑移动游戏对象。

Step 5: 测试游戏

现在,我们已经完成了所有的C#编码,我们可以通过在Unity编辑器中运行游戏来测试它。您应该能够移动游戏对象,并使用玩家控制器的其他按键和轴控制游戏对象的行为。

Conclusion

在本教程中,我们学习了如何使用Unity3D中的播放器输入管理器,以及如何在C#编码中使用它来定义和处理游戏对象的输入。该工具可以大大减少我们在处理输入时所需的代码量,使游戏开发更加便捷和高效。