动作是玩家操作控制项 后,在游戏中触发的行为。
例如:向左转向、切换相机视角、切换菜单。
动作被定义在一个或多个 .json 文件中。
通过模组提供新的额外动作是可行的。需要注意的是,如果你没有同时提供一些动作按键的绑定,那么你的模组的用户会需要手动配置他的控制器。
常规动作是指无论当前使用哪个车辆都可以触发的动作。
因此,即使在主菜单中,在进入任何关卡或生成任何车辆之前,它们也是可用的。
BeamNG.drive 附带了许多预定义的常规动作。这些动作被定义在:
lua/ge/extensions/core/input/actions/*.json
模组可以绑定额外的常规动作。要做到这一点,模组必须提供一个或多个额外的 json 文件,这些文件遵循以下命名约定:
lua/ge/extensions/core/input/actions/*.json
例如:
lua/ge/extensions/core/input/actions/explosions_mod.json
lua/ge/extensions/core/input/actions/advanced_menus.json
在这里定义的任何动作都将与 BeamNG.drive 提供的默认动作混合在一起,在 选项 → 控制 菜单中供最终用户使用。
input_actions.json 文件,但这意味着模组作者需要在每次 BeamNG.drive 更新带来新动作(或修改、删除动作)时,不断更新其修改过的文件。因此强烈建议不要这样做。特定车辆动作是指只能在驾驶特定车辆时触发的动作。如果你切换到不同类型的车辆,它们将会被新车辆的动作所取代。
BeamNG.drive 的一些官方车辆带有一些预定义的特定车辆动作。例如,小型加农炮(Small Cannon)提供了使用控制器开火的能力。这些特定车辆动作被定义在:
vehicles/vehicle_directory_name/input_actions.json
和常规动作 相似,模组也可以绑定额外的特定车辆动作。由模组提供的文件必须遵循以下命名约定:
vehicles/vehicle_directory_name/input_actions*.json
例如:
vehicles/hatch/input_actions_hydraulic_suspension.json
vehicles/pickup/input_actions_winch_cable.json
所有这些动作通常会在 选项 → 控制 菜单的 “特定车辆” 类别中找到。
动作文件通常采用
json 格式
。必须以左大括号 { 开头,并以右大括号 } 结尾。以下示例展示了其整体结构:
{
"an_action" : {"order":1, "title":"Do Something", ...},
"another_action": {"order":2, "title":"Do Something Else", ...},
"third_action" : {"order":10, "title":"Do More Things", ...},
//...
}
每行都有两部分:
"an_action"。"order", "title", "ctx", 等。这里有关于它们的详细信息:
动作名称必须是唯一的,否则可能会被其他使用了相同动作名称的模组覆盖。具体来说:
确保动作名称唯一的最简单方法是使用一个独特的前缀。例如:
{
"extra-menus-mod_an_action" : { ... },
"extra-menus-mod_another_action": { ... },
"extra-menus-mod_third_action" : { ... },
//...
}
动作的参数控制着该动作的实际功能及其在菜单中的显示方式。以下是所有详细信息的表格:
确定动作将分配到哪个 动作映射 。按优先级排序,最常见的动作映射是:
可以指定自定义名称,并自动创建相应的动作映射。这对于模组想要快速激活/停用某些动作集等非常有用
定义 onChange/onUp/onDown/onRelative 中定义的代码如何执行:
指定在动作触发时执行哪个源代码。代码执行上下文定义在当前动作的 ctx 参数中
至少需要定义其中之一。它们触发的方式如下:
动作的类别是一个必需的参数,但其作用仅影响显示效果。
它将影响该动作在游戏内各种菜单(例如 选项 → 控制 下的动作层级结构)中的显示位置。
要查看可用的类别列表,请参考以下文件:
lua/ge/extensions/core/input/categories.lua
这篇文章对你有用吗?