在蓝图中设置Actor的输入

如何在蓝图中设置Actor的输入的操作指南

Windows
MacOS
Linux

该页面包括如何为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(它让你能在任何父类中删除任何约束设置)选项。

Select Skin
Light
Dark

Welcome to the new Unreal Engine 4 Documentation site!

We're working on lots of new features including a feedback system so you can tell us how we are doing. It's not quite ready for use in the wild yet, so head over to the Documentation Feedback forum to tell us about this page or call out any issues you are encountering in the meantime.

We'll be sure to let you know when the new system is up and running.

Post Feedback