设置 BindObjects 后,对象销毁并在场景切换返回时发生崩溃

您好。
关于上述问题,在如下步骤中,当设置了 BindObjects 的对象被销毁并返回原场景后,游戏会发生崩溃:

① 为对象 1 设置 BindObjects(添加连接数据以连接并生成对象)
② 将对象 1 放置到场景 1
③ 在场景 1 中销毁对象 1
④ 使用 portal 从场景 1 切换到场景 2
⑤ 使用 portal 从场景 2 返回场景 1
⑥ 游戏崩溃

在 VS 中生成对象时似乎没有问题。
烦请协助确认此问题。

■godot.log
Action Game Maker 1.2.10 基于 Godot v4.4 - ACTION GAME MAKER 公式ホームページ
Vulkan 1.2.154 - Forward+ - 使用设备 #0: Intel - Intel(R) UHD Graphics

CrashHandlerException: 程序崩溃
引擎版本:Action Game Maker v4.4.1.stable.custom_build
正在转储堆栈跟踪。请在向项目开发者报告错误时包含此信息。
[0] <无法将 PC 映射到函数名>
[1] <无法将 PC 映射到函数名>
[2] <无法将 PC 映射到函数名>
[3] <无法将 PC 映射到函数名>
[4] <无法将 PC 映射到函数名>
[5] <无法将 PC 映射到函数名>
[6] <无法将 PC 映射到函数名>
[7] <无法将 PC 映射到函数名>
[8] <无法将 PC 映射到函数名>
[9] <无法将 PC 映射到函数名>
[10] <无法将 PC 映射到函数名>
[11] <无法将 PC 映射到函数名>
[12] <无法将 PC 映射到函数名>
[13] <无法将 PC 映射到函数名>
[14] <无法将 PC 映射到函数名>
– 堆栈跟踪结束 –

感谢您的报告!

我尝试在以下条件下进行最小化复现,但未能重现问题。请问是否还有其他遗漏的操作步骤?

  1. 在对象1中通过 BindObjects 设置对象2,不启用/禁用开关设置,连接对象在场景加载时已设置(对象2为初始状态的、空的对象)。
  2. 在对象1中设置1秒后自身销毁,并将其放置在场景1中。
  3. 另外准备一个玩家对象,确认对象1销毁后,通过传送门从场景1转移到场景2。
  4. 通过传送门从场景2返回场景1。
  5. 没有发生崩溃,对象1再次出现并销毁。
1 个赞

感谢您的确认。

我认为操作步骤是正确的,因此可能是我的某些设置导致了问题。

我附上了一个用于复现该问题的测试项目,麻烦您帮忙确认一下。

■ 测试项目

testproject_2026-05-11.zip (1.4 MB)
① 启动后,1秒后销毁对象1
② 启动后,2秒后销毁子对象(即使不销毁子对象,问题也会发生)
③ 移动玩家,通过平台边缘的传送门从场景1转移到场景2
④ 移动玩家,通过平台边缘的传送门从场景2转移到场景1 ★此处发生崩溃

1 个赞

感谢你的重现项目!
我已经在这个项目中确认了问题,并将向开发团队报告。
我尝试更改了各种设置,但不知道具体是什么导致了差异……真是让人困惑……

1 个赞

非常感谢您的帮助,拜托您了。

我也会再仔细确认一下设置内容。

如果有新的进展,请随时告知我。再次感谢您的支持。

虽然无法实现原本想要的功能,但勾选子对象的“放弃移动控制”复选框后,不再发生崩溃。
不确定这对调查是否有参考价值,请多关照。

感谢您的补充调查!

看来是程序在尝试跟随已消失的父对象时发生了崩溃……

我会将此情况报告上去。

1 个赞

关于此问题,崩溃问题已在今天发布的版本 1.2.11 中修复。

不过,该问题涉及两个相互关联的因素:

  1. 通过 BindObjects 生成时,如果父对象被标记为销毁,会导致崩溃(←即您报告的问题)
  2. 复活条件为“场景切换”的对象,在切换场景后返回时,会增殖为“原本存在于场景中的对象”和“复活后的对象”两个实例。

第 2 点目前仍在修复中。

1 个赞

感谢您的联系。

关于第1点,我也确认了不会发生崩溃的情况。

非常感谢您的迅速处理。

关于第2点,正如您所告知的那样,我确认了在对象消失后切换场景再返回时,会出现消失的对象不动或者对象增殖成两个的情况。

关于这一点,还请您继续协助处理。

我们已在今天发布的1.2.12版本中修复了对象分裂的问题!

关于此问题,在 1.2.12 版本中仍复现了分裂问题。
此外,似乎还存在“出现时执行状态”未执行的缺陷。
现将我们执行的操作记录如下,敬请确认。

■已执行的操作
① 消亡 1 个对象后切换场景并返回

  1. 未复现分裂事件,但对象的“出现时执行状态”未执行
  2. 再次切换场景并返回
    → 对象的“出现时执行状态”得以执行

② 消亡 2 个对象后切换场景并返回

  1. 未复现分裂事件,但两个对象的“出现时执行状态”均未执行
  2. 将处于上述状态的对象再次消亡,切换场景并返回
    → 被消亡的对象发生了分裂

关于此事,部分对象无法复现分裂现象,但若执行步骤②-1至②-2,则会在对象进入摄像机画面时触发伤害处理,导致对象消失。虽然怀疑是“出现时的执行状态”未执行所致,但具体条件尚不明确。。。

关于这一点,“出现时的执行状态”顾名思义,仅在角色出现时触发,从消灭状态复活时不会执行。
因此,您是否可以考虑通过设置链接等方式,使角色在消灭后返回初始状态来应对这种情况?

感谢您的回复。

我尝试了您提供的方法,结果如下:

・如果在消亡后无条件地返回初始状态,虽然对象不可见,但初始状态之后的VS(Victory Screen/状态机逻辑)仍在执行。(敌人的攻击依然会击中玩家对象)

・如果在对象完全消亡后再返回初始状态,由于对象已经不存在,因此无法执行返回初始状态的操作。

------
以下是我个人的看法,希望能得到您的确认和考虑。
・由于我的架构问题,多个(小怪)敌人对象由同一个VS管理,因此上述对策实施起来比较困难
→需要通过变量等方式对需要返回的初始状态进行分支判断

・对于BaseSettings中消亡后复活的对象不执行初始状态这一点,我感到有些违和
→考虑到分裂等情况,复活在内部逻辑上相当于放置了另一个对象,因此应该执行初始状态。此外,在动作游戏中,敌人复活时执行初始状态会感觉更自然

→如果复活时不执行初始状态,我希望有一个可以设置“复活时执行的特定状态”的选项(虽然这个状态基本应该就是初始状态,所以可能意义不大)

感谢您的意见。

虽然这一变更会影响现有行为,需要谨慎评估,但确实看起来更合理。我会与开发团队协商一下。

1 个赞

谢谢。
无论如何,目前在使用 VS 进行消亡后恢复到初始状态的效果并不理想,因此我认为至少需要采取某种替代方案。

给您添麻烦了,敬请谅解。

经与开发团队确认,是我之前的理解有误。
复活时执行的并非最后执行的“状态”,而是“初始状态”。
如果执行的是初始状态以外的状态,则可能是存在 Bug。

另外,关于“出现时的状态”,我们正在研究是否可按您的要求,在复活时实现该功能。
为避免与传统规格冲突,我们可能会新增一项名为“复活时的状态”的设置。

1 个赞

感谢您的联系。
刚才确认后发现,复活时执行的是“初始状态”。
因此,这似乎不是 Bug。

不过,如果保持现状的话:

  • 如果想在左侧脚手架上放置左右移动的僵尸
  • 想在右侧脚手架上放置追踪玩家的僵尸
    那么在复活时执行初始状态,复活后的行为可能无法按预期实现。
    虽然分别为每种行为创建对象和 VS 或许可行,但我觉得那样未免过于繁琐。

另外,关于“出现时的状态”,我们正在研究是否能在复活时实现您的要求。
为避免与现有规格冲突,我们可能会新增“复活时的状态”这一设置。
感谢您的考虑。
就我个人而言,如果复活时不执行“初始状态”,而是执行“出现时的执行状态”,至少可以解决基本问题。
不过,正如您所认识到的,由于涉及现有规格及其他功能之间的相互关系,我可能也有尚未完全了解的部分。在您百忙之中打扰,实在抱歉,还请您继续予以研究,非常感谢。

我们已在本日发布的 1.2.13 版本中,通过添加「复活时状态」设置的方式实现了该问题,敬请谅解。

1 个赞

感谢您为复活时添加执行状态的功能。
我们已确认新增功能运行正常。
感谢您考虑此次提议并迅速作出响应。

不过,在测试项目中无法复现该问题,但在我正在开发的项目中,不知为何出现了对象分裂的现象。
由于尚未查明原因,我将进行一些调查和验证。

此外,虽然尚不清楚是否由本次修复引起,但出现了以下现象。
随信附上测试项目文件,烦请查阅。
testproject_2026-05-26.zip (2.1 MB)

■复现方法
前提条件(敌人设置):

  • 显示方向:通过 FaceDirection 设置为面向玩家
  • 模板移动:设置为向玩家靠近
  • BaseSettings 中的左右反转模式:开启
  • 出现时的执行状态和复活时的执行状态:设置为非初始状态

操作步骤:

  1. 启动后,按 Z 键攻击并击败敌人对象
  2. 从右侧传送门进入场景 2
  3. 从场景 2 的右侧传送门返回场景 1
  4. ★敌人对象在面向后方的同时向玩家靠近
  5. 若未结束调试,再次执行步骤 1 至 4,敌人对象将以正确的方向向玩家靠近

据观察,若将初始状态的动画类别名称留空(或未设置,使用连字符),则上述现象不再发生(敌人的方向将正确)。

1 个赞