diff --git a/App/scripts/TestShoot.cpp b/App/scripts/TestShoot.cpp index f67c5a8..767157a 100644 --- a/App/scripts/TestShoot.cpp +++ b/App/scripts/TestShoot.cpp @@ -81,6 +81,12 @@ namespace { void OnCollisionEnter(u32 other, const glm::vec3& point, const glm::vec3& normal) override { + // 防重入:Destroy 是帧尾延迟执行,命中帧内子弹与碎片群 + // 可产生多对接触事件(碎片云一块挨一块),无标志会一帧 + // 爆出 N 个特效(同 WallFracture m_Fired 的一次性触发模式) + if (m_Hit) return; + m_Hit = true; + (void)other; (void)normal; // 法线留给将来定向溅射 // 命中特效:空实体锚在命中点,ImpactFx 脚本项由下一帧对账 @@ -101,6 +107,7 @@ namespace { glm::vec3 m_Velocity{0.0f}; f32 m_Lifetime = 5.0f; f32 m_Age = 0.0f; + bool m_Hit = false; // 首次命中置位(防同帧多次接触重复特效) }; // ---- 命中特效脚本(Bullet 运行时挂载;空实体 + 调试点标占位)---- diff --git a/Engine/src/Serialization/SceneSerializer.cpp b/Engine/src/Serialization/SceneSerializer.cpp index d8c050c..a81115a 100644 --- a/Engine/src/Serialization/SceneSerializer.cpp +++ b/Engine/src/Serialization/SceneSerializer.cpp @@ -440,7 +440,10 @@ namespace Engine::Serialization { } if (const auto* c = reg.try_get(e)) { - out << YAML::Key << "Attached" << YAML::Value + // 键名 = "Camera"(与读侧 731 行对称;曾误写 "Attached" + // 导致 PIE 快照恢复丢相机组件——磁盘场景手写 YAML 键名 + // Camera 才一直没暴露) + out << YAML::Key << "Camera" << YAML::Value << YAML::BeginMap; out << YAML::Key << "Primary" << YAML::Value << c->primary; out << YAML::Key << "Active" << YAML::Value << c->active;