[自定义操作] Baz 更改节点属性操作

以下是转换后的帖子,已去除连字符和分号,并展开复合词:


BazChangeNodePropertyAction

用于在场景中的任何节点(包括非 AGMaker 对象的节点)上设置真实的、具有特定类型的 Godot 属性,例如 modulatevisiblepositionscaletext

你可以将其视为原生 Change Object Property 的缺失另一半。它可以从游戏场景中获取节点,或通过名称获取节点。

为了支持我的工作,请考虑 成为赞助者:folded_hands:

下载:
BazChangeNodePropertyAction.gd (34.8 KB)

要求

AGMaker 1.3.0 及以上版本

安装

  1. 下载 BazChangeNodePropertyAction.gd(见下方附件)。
  2. 将其放入项目的 custom_actions/ 文件夹中。如果该文件夹不存在,请在项目根目录下创建。子文件夹如 custom_actions/object/ 也是可以的。
  3. 完成。它将显示在 Add Action 对话框中的 Object / オブジェクト 组下。无需启用任何内容。

功能说明

将 AGMaker 中仅支持浮点数的属性更改功能,扩展为允许你设置 真实 的 Godot 属性及其 真实 类型,即属性实际所需的 ColorVector2Stringbool 或数值。

  • 任何类型的属性。 modulate(Color)、position/scale(Vector2)、text(String)、visible/flip_h(bool)、z_index(int)、rotation(float)。选择值类型,它就会直接写入该节点。
  • 单个通道。 添加通道以仅修改某一部分:modulate:a 仅设置透明度,position:x 仅设置 X 轴。通道接受 Float 值,因此你可以微调一个轴而无需重建整个向量。
  • 三种目标定位方式。 从场景中选择一个确切节点,命中当前活动场景中第一个按名称匹配的节点,或一次性更改组中的每个成员。
  • 防崩溃保护。 它在写入前会检查属性是否存在以及值是否匹配,因此拼写错误只会导致跳过并记录日志,而不会中断你的逻辑。
  • 编辑器便利性。 当类型已知时,选择或输入属性会自动填充 Value Type(你也可以随时覆盖它),而 Node Type 的 Browse All Classes… 条目会打开编辑器自身的 Add Node 类树。
  • 独立且可共享。 单个文件,无需 autoload,无需 Project Settings,无需额外管理内容。

使用方法

将其添加到状态或转换中,在顶部选择目标节点的方式,然后选择属性和值。

  • 目标定位(Targeting) 是查找节点的方式。Pick From Scene = 选择一个场景及其中的一个节点,仅在该场景激活时运行。By Node Name = 当前活动场景中第一个具有你输入名称的节点。In Group = 当前活动场景中某个组的所有成员。
  • Target Scene / Target Node (Pick From Scene)。场景,然后是其下拉列表中的节点。你也可以手动输入更深的路径(例如 SceneLayer/BaseLayer/Player/Sprite2D)以访问嵌套对象。
  • Node Search Name (By Node Name)。要查找的名称。*? 可用作通配符(Torch* 匹配 Torch2)。
  • Node Type + Group (In Group)。成员将被更改的组。Node Type 是可选的,仅用于为你填充 Property Name 的建议。
  • Property Name。Godot 属性,例如 modulate,或 modulate:a 表示单个通道。
  • Value Type + value。值的类型(Float、Integer、Boolean、Text、Vector2、Color)以及值本身。仅显示匹配的值字段。

示例,全屏淡入淡出:In Group → 你的 Lights 组 → 属性 modulate:a → Value Type Float0.0 会同时使房间内的所有灯光变暗。

提示

  • 通道仅支持 Float。 modulate:aposition:xscale:y 均接受 Float 值。这就是你可以在不干扰其他部分的情况下动画化单个轴的方式。
  • Pick From Scene 故意受场景限制。 它仅在其所选场景为活动场景时触发,因此放置在共享对象上的相同操作在其他地方保持静默。
  • 命名约定节点。 在每个房间中为同一节点赋予相同的名称(AmbientLightMusic),然后 By Node Name 即可更改“当前房间中的那个节点”,而无需进行每场景设置。
  • GameObject 的 visible 属性会冲突。 AGMaker 会重新断言 GameObject 自身的 visible,因此如果你想隐藏某个对象并保持隐藏状态,请 targeting 子节点(或使用 modulate:a)。
  • 开启 Debug 以在接线时打印每次跳过(属性缺失、类型不匹配、场景门控)并匹配到 Output 面板。
1 个赞