在蓝图中设置Actor的输入

本页面的内容:

该页面包括如何为Actor**Enable Input**或**Disable Input**的基本方法。通过启用 Actor 的输入,你可以让玩家按一个按钮或按键,并执行以某种方式影响 Actor 的事件(开灯或关灯、开门或关门、启动某个东西等) 。

启用/禁用输入用法部分还包括一种启用/禁用输入的方法,用Trigger Volume来确定玩家是否接近该等级的Actor。如果你想让玩家仅在接近或在Actor的范围内时才影响Actor,以便在真实场景中令人信服地影响它,这就很有用。

启用Actor输入

在本例中,我们将使用**Blueprint First Person Template with Starter Content**。

以下步骤将告诉你如何为Actor启用输入:

  1. 在**StarterContent/Blueprints**文件夹中打开**Blueprint_Effect_Fire**资源。

  2. 在**Event Graph**选项卡上,在图形中**Right-click**并搜索,然后添加**Event Begin Play**节点。

  3. 在图形中,**Right-click**搜索并添加**Get Player Controller**节点。

  4. 在图形中,**Right-click**搜索并添加**Enable Input**节点。

  5. 使**Event Begin Play**的输出针与**Enable Input**节点的输入针连接。

  6. 使**Get Player Controller**节点与**Enable Input**节点的**Player Controller**针连接。

    input_1.png

    这是启用Actor的输入的基本方法。

Enable Input**节点要求指定**Target(通常是自身——Actor本身)和**Player Controller**(将提供输入的玩家)。用该设置,你现在可以搜索并添加**Input Event**节点(如按下按键或鼠标按钮),并在按下这些按键时执行影响Actor的操作。

在上例中,Event Begin Play**节点指出,当游戏开始时(假如在该等级中存在Actor),为指定的**Player Controller****Enable Input。默认玩家控制器为单人游戏使用**Player Index 0**,如果要有多人场景,你可以通过**Player Index**值指定玩家。

禁用Actor输入

正如你可以启用Actor的输入一样,你也可以用**Disable Input**节点禁用Actor的输入。

input_2.png

在上例中,我们使用了启用Actor的输入的上述方法,然后添加了一个**E**键事件。当按下**E**键时,我们输出到屏幕上一些文字,然后禁用Actor的输入,使其无法再向Actor提供输入。

如同**Enable Input**节点一样,Disable Input**节点需要指定**Target**和**Player Controller

启用/禁用输入用法

虽然上面提到的方法适用于启用/禁用输入,但你通常会希望有一些规则来管理何时允许Actor接收来自玩家的输入。如果我们要用上面的方法启用 Event Begin Play 的输入,并有一个开灯或关灯的按键(例如),玩家将能从全世界任何地方打开/关闭那盏灯。

我们希望能基于玩家是否靠近灯来启用/禁用输入,类似于如下:

  1. 在**StarterContent/Blueprints**文件夹中打开**Blueprint_CeilingLight**资源。

  2. 在**Components**面板中点击**Add Component,然后搜索并添加**Sphere Collision

    input_3.png

  3. 在**Details**面板中,将**Variable Name**设置为**Trigger,将**Z Transform**设置为-180.0**0,并将**X, Y, Z 的**Scale**设置为至**8

    input_4.png

    我们将启用(当玩家在里面时)或禁用(当玩家在外面时)球体的输入。

  4. 返回**Event Graph**。

  5. 在**MyBlueprint**窗口中**Right-click****Trigger,然后选择**Add Event -> Add OnComponentBeginOverlap

    input_5.png

  6. 再次**Right-click****Trigger,然后选择**Add Event -> Add OnComponentEndOverlap

    input_5b.png

    这两个事件节点应被添加到图形上。

  7. 拖走 Begin Overlap 节点的**Other Actor**针,然后搜索并添加**Cast To FirstPersonCharacter**节点。

    input_6.png

    在这里,我们要说的是,当名为**FirstPersonCharacter**的 Actor(这是项目模板的默认玩家人物)与**Trigger**重叠时,做点什么。

  8. 从End Overlap节点的**Other Actor**针 练出来,然后添加**Cast To FirstPersonCharacter**节点。

  9. Right-click**并添加**Get Player Controller**节点、Enable Input**,以及**Disable Input**节点。

  10. 如下所示连接节点。

    input_7.png

    现在只能在玩家进入触发器时启用输入,并在玩家离开触发器时禁用输入。这可以防止玩家从全世界任何地方影响Actor,而使其只局限在他们位于我们创建的trigger volume内时。

  11. **Right-click**并将**E**键事件和它添加至**Print String**节点。

    input_8.png

  12. Compile**并**Save,然后关闭蓝图。(如果你收到警告,忽略它并继续执行下一步。)

  13. 将**Blueprint_CeilingLight**拖进该等级,然后点击**Play**按钮,以在编辑器中播放。

播放时,如果你在远离灯时按**E**,什么都不应该发生。当你靠近灯(在触发器内)并按**E**时,文本**Hello**应出现在窗口的左上角。在本例中,我们连接了一个**Print String**节点,但在按下按键且玩家位于触发球内时,你可以切换光的颜色、强度,或其它设置。

输入详情

替换上例中的**E**键事件,并尝试使用**Space Bar**键事件。当你在编辑器中播放时,留意发生了什么。你可以在位于灯的触发器外时按**Space Bar**来跳转,但当你进入触发器并按**Space Bar**时,你不再跳转,而是调用**Print String**和文本**Hello;这是由于**Input Priority

当共享输入命令时(正如这里的情况一样,我们为灯分配的跳转和输入均与**Space Bar**关联),优先级较低的操作被忽略。在灯蓝图内,如果你点击**Space Bar**键事件然后查看**Details**面板,你应该能看到**Consume Input**的选项。

input_9.png

如果取消选中**Consume Input**复选框,并再次在编辑器中播放,你现在应该能在灯的trigger volume内部和外部跳转。在灯的trigger volume内时,按**Space Bar**也将调用**Print String**节点并显示**Hello**文本。

另外,在**Input Details**窗口中有**Execute when Paused(它让你能在暂停状态下按键并执行命令)和**Override Parent Binding(它让你能在任何父类中删除任何约束设置)选项。