修复 PIE 快照丢相机组件(序列化写出键 Attached ≠ 读侧 Camera)与子弹同帧多接触重复特效(Bullet 命中防重入)

This commit is contained in:
2026-10-08 23:06:18 +08:00
parent 21da38db92
commit d4d37b4b28
2 changed files with 11 additions and 1 deletions
+7
View File
@@ -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 运行时挂载;空实体 + 调试点标占位)----
+4 -1
View File
@@ -440,7 +440,10 @@ namespace Engine::Serialization {
}
if (const auto* c = reg.try_get<ECS::CameraComponent>(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;