本文内容
在 Open 3D Engine 中使用玩家输入
您可以为 Input 组件创建输入绑定资产,并使用 **Open 3D Engine (O3DE) Asset Editor **指定输入事件。使用 Script Canvas 或 Lua 将输入事件映射到游戏逻辑。
创建输入绑定资产
要使用 Asset Editor 创建 .inputbindings
文件,请执行以下步骤。
在 **O3DE 编辑器 ** 中,创建一个实体。
在视口或Entity Outliner中选择实体。
在 Entity Inspector 中,点击 Add Component,然后添加一个Input组件。
在 Entity Inspector 中,找到Input组件,然后在Asset Editor中点击
创建新的
.inputbindings
文件。
创建输入事件组
您可以将不同操作的输入事件组添加到新的 .inputbindings
文件中。
要创建新的输入事件组,请点击
图标。
对于 Event Name,为事件输入名称,例如
Action
。
创建事件生成器
创建输入事件组后,您可以向该组添加事件生成器。事件生成器是生成命名事件的处理程序。例如,按下的键、按住的鼠标按钮或游戏控制器上的一系列操作都会产生命名事件。
在新的输入事件组中,点击Event Generators 旁的
图标。
在 Class to create 对话框中,选择
InputEventMap
,然后选择 OK。指定事件生成器的更改。每个事件生成器都有一组可以自定义的属性。
设置事件生成器属性
以下 .inputbindings
文件为 Input Device Type 指定键盘,为 Input Name 指定空格键。
保存输入绑定资产
在 Asset Editor中,选择 File, Save.
为
.inputbindings
文件输入一个名称,然后选择 Save.在 Entity Inspector 中,在 Input 组件中,对于 Input to event bindings, 点击
,,然后选择你的
.inputbindings
文件。
将输入事件映射到 Gameplay 逻辑
创建 .inputbindings
文件并指定输入事件后,您可以使用 Script Canvas 或 Lua 将输入事件映射到游戏逻辑。您可以使用 Script Canvas 编辑器 在可视化脚本环境中创建游戏逻辑,或使用 Lua 编辑器 (Lua IDE) 编写您自己的 Lua 脚本。
在 Script Canvas 中使用输入
您可以创建连接到输入事件的 Script Canvas 图表。有关使用 Script Canvas 编写脚本的更多信息,请参阅 使用 Script Canvas 创建游戏和其他行为。
在 O3DE 编辑器中,在视口或 Entity Outliner中选择带有Input组件的实体。
在 Entity Inspector 中,点击 Add Component 并添加 Script Canvas 组件。
在 Script Canvas 组件中,对于 Script Canvas Asset,点击
,然后创建一个新的 Script Canvas 图表,如以下示例所示。
示例 Script Canvas 图表
在以下图表中, InputHandler 节点连接 Action
事件到各个 Transform 节点。当事件生成器的状态更改时,Input组件发送 Pressed, Held, 和 Released 事件到 InputHandler 节点。
在Lua中使用输入
您还可以创建连接到输入事件的 Lua 脚本。有关使用 Lua 编写脚本的更多信息,请参阅 编写 Lua 脚本.
在 O3DE 编辑器中,在视口或 Entity Outliner中选择带有Input组件的实体。
在 Entity Inspector 中,点击 Add Component 并添加 Lua Script 组件。
在Lua Script组件中,点击
.
在 Lua 编辑器中,为想要连接脚本的输入事件添加
OnPressed
,OnHeld
, 和OnReleased
函数的表。通过连接到
InputEventNotificationBus
来创建总线处理程序,并将第一个参数设置为输入事件的函数表。第二个参数是 Event Name的InputEventNotificationId
。
Lua 脚本示例
以下 Lua 脚本将 Action
事件连接到各个函数OnPressed
, OnHeld
, 和 OnReleased
。
local tutorial_input = {
Properties = {}
}
function tutorial_input:OnActivate()
self.ActionInputs = {}
self.ActionInputs.OnPressed = function(_, value)
TransformBus.Event.SetLocalUniformScale(self.entityId, 2.0)
end
self.ActionInputs.OnHeld = function(_, value)
TransformBus.Event.RotateAroundLocalZ(self.entityId, 0.01)
end
self.ActionInputs.OnReleased = function(_, value)
TransformBus.Event.SetLocalUniformScale(self.entityId, 1.0)
end
self.ActionInputHandler = InputEventNotificationBus.Connect(self.ActionInputs, InputEventNotificationId("Action"))
end
function tutorial_input:OnDeactivate()
self.ActionInputHandler:Disconnect()
end
return tutorial_input
测试玩家输入
使用 Script Canvas 或 Lua 将.inputbindings
文件中的输入事件连接到输入处理程序后,您可以在 O3DE 编辑器中测试播放器输入。
在 O3DE Editor 中,在视区或 Entity Outliner 中选择具有 Input 和 scripting (输入和脚本) 组件的实体。
注意:在 Entity Inspector中,点击Add Component,然后添加Mesh 组件
在 Mesh asset中,指定网格资源文件。这将为您的实体提供在 Game Mode 中可见的形状。
要进入游戏模式,按下Ctrl+G。
按 空格键 以便您的实体在局部 z 轴上旋转。当从连接到
Action
的输入处理程序接收到事件OnPressed
时,实体的比例会加倍。当收到OnReleased
事件时,实体的缩放将恢复正常。要退出游戏模式,按下 Esc.