在《Action Game Maker》中,是否可以实现与《Action Game Maker MV》中“Gimmick Tile”类似的功能?例如,当玩家与特定图块重叠时触发事件,从而修改变量或生成粒子效果?
Tile 不具备 PGM 那样的机关功能。我知道之前曾讨论过未来可能为 Tile 提供特殊选项,但我无法确定这是否会实现、何时实现或如何实现。
目前,Tile 提供以下可用选项,您可以利用带有可视化脚本的 GameObject 来实现 PGM 机关行为:
关于这一点,虽然目前没有“机关瓷砖(Gimmick Tile)”的功能,但可以通过脚本实现替代方案。
原因是:Godot 的设计并未采用“为瓷砖本身设置脚本”的方式,而是规定通过脚本控制行为的对象应使用“StaticBody”、“CharacterBody”、“Area2D”等节点。
目前我们正在考虑开发无需脚本即可使用的机关瓷砖替代功能,但尚未实现。
针对您咨询的内容,以下是解决方案:
通过瓷砖与玩家重叠等触发器来修改变量
建议使用瓷砖的区域 ID(Area ID)而非脚本,为玩家添加一个子对象,使其在检测到指定区域 ID 时修改变量。
通过瓷砖与玩家重叠等触发器来生成粒子
建议使用 StaticBody2D 创建对象。通过以下设置,可以实现“当角色接触时显示 GPUParticle2D 粒子”的效果。
示例对象:
StaticBody2D_ギミック.zip (1019 字节)
代码内容:
extends StaticBody2D
@onready var particles: GPUParticles2D = $GPUParticles2D
@onready var area: Area2D = $Area2D
func _ready() -> void:
particles.emitting = false # 关闭 Emitting
# 在代码中连接信号
area.body_entered.connect(_on_area_body_entered)
area.body_exited.connect(_on_area_body_exited)
func _on_area_body_entered(body: Node2D) -> void:
if body.is_in_group("Player"):
if particles.one_shot:
particles.restart()
particles.emitting = true
func _on_area_body_exited(body: Node2D) -> void:
if body.is_in_group("Player"):
# 离开 Area 时关闭 Emitting
if !particles.one_shot:
particles.emitting = false
感谢您的说明。
很抱歉,由于我对 Godot 的了解有限,对于您提供的解决方案,我完全不清楚具体该如何实施。同时,我也不太明白如何使用您提供的示例对象。
您能否通过截图或视频等方式进行说明呢?
关于示例对象的使用方法:
请将随附的 static_body_2d.tscn 和 static_body_2d.gd 文件放在同一文件夹中,然后像游戏对象一样通过拖放或实例化加载到场景中,即可正常运行。
其内部结构如下所示:
最上方的 CollisionShape2D 为“墙壁判定”;
GPUParticles2D 为粒子效果;
Area2D 子节点中的 CollisionShape2D 为“接触检测范围”。
其工作原理是:当“玩家的墙壁判定”处于“接触检测范围”内时,名为"GPUParticles2D"的粒子节点会发射粒子。
基本操作步骤如下:
- 新增 Sprite2D 并设置纹理;
- 根据纹理大小调整墙壁判定区域的大小;
- 将接触检测范围设置为略大于纹理尺寸;
- 修改"GPUParticles2D"的设置,使其能够发射粒子。
按以上步骤操作即可正常运行。
此外,您也可以将此代码提供给 ChatGPT 等工具,以实现进一步的自定义。
感谢您的说明。
关于旧版 Actzuku 的机制方块,在接触后可以修改变量并使方块消失,但由于这仅涉及粒子显示,是否无法实现?
我希望能用机制方块重现类似马里奥中的金币效果。
我们在团队内部讨论后,Baz 先生将其作为插件实现了。您觉得使用这个功能如何?

