diff --git a/App/editor/InspectorPanel.cpp b/App/editor/InspectorPanel.cpp index 508ed64..33c0906 100644 --- a/App/editor/InspectorPanel.cpp +++ b/App/editor/InspectorPanel.cpp @@ -406,7 +406,7 @@ void InspectorPanel::Draw(const EditorContext& ctx, entt::entity selected) ImGui::SliderFloat("gravityScale", &rb->gravityScale, -1.0f, 5.0f); ImGui::SliderFloat("friction", &rb->friction, 0.0f, 2.0f); ImGui::SliderFloat("restitution", &rb->restitution, 0.0f, 1.0f); - ImGui::Checkbox("isSensor", &rb->isSensor); + ImGui::Checkbox("isTrigger", &rb->isTrigger); if (rb->bodyValid && rb->type == Engine::ECS::RigidBodyComponent::BodyType::Dynamic) { diff --git a/Engine/include/Engine/ECS/Components.h b/Engine/include/Engine/ECS/Components.h index 096d307..f0f8205 100644 --- a/Engine/include/Engine/ECS/Components.h +++ b/Engine/include/Engine/ECS/Components.h @@ -232,8 +232,9 @@ namespace Engine::ECS { f32 friction = 0.5f; f32 restitution = 0.2f; - // 传感器(Unity isTrigger 语义):只产生 Added/Removed 事件,无碰撞解算 - bool isSensor = false; + // 触发器(Unity isTrigger / UE Overlap Events 语义):只产生 + // Added/Removed 事件,无碰撞解算;底层 Jolt sensor + bool isTrigger = false; // 运行时(PhysicsWorld 维护,勿手改) u32 bodyId = 0; // JPH::BodyID 裸位 diff --git a/Engine/include/Engine/Physics/PhysicsWorld.h b/Engine/include/Engine/Physics/PhysicsWorld.h index 6011b79..516d25c 100644 --- a/Engine/include/Engine/Physics/PhysicsWorld.h +++ b/Engine/include/Engine/Physics/PhysicsWorld.h @@ -110,7 +110,7 @@ namespace Engine { f32 halfHeight = 0.0f; // Capsule/Cylinder 圆柱段半高 std::vector compound; // 子形状快照 f32 mass = 0.0f; - bool isSensor = false; // 传感器标记(变更 → 重建 body) + bool isTrigger = false; // 触发器标记(变更 → 重建 body) glm::vec3 lastPos{0.0f}; // 静态/运动体编辑器拖动检测 glm::quat lastRot{1.0f, 0.0f, 0.0f, 0.0f}; // 同上(quat 直比,无欧拉往返) // 加速度箭头用:上一步速度(定步长差分)与平滑后的加速度 diff --git a/Engine/src/Physics/PhysicsWorld.cpp b/Engine/src/Physics/PhysicsWorld.cpp index 9f287e4..cc2075b 100644 --- a/Engine/src/Physics/PhysicsWorld.cpp +++ b/Engine/src/Physics/PhysicsWorld.cpp @@ -390,7 +390,7 @@ namespace Engine { rec.halfHeight != halfHeight || rec.compound != rb.compound || rec.mass != rb.mass || - rec.isSensor != rb.isSensor) { + rec.isTrigger != rb.isTrigger) { // 类型/碰撞体/质量变更 → 重建(简单正确,重置速度可接受) bi.RemoveBody(rec.id); bi.DestroyBody(rec.id); @@ -860,7 +860,7 @@ namespace Engine { settings.mFriction = rb.friction; settings.mRestitution = rb.restitution; settings.mUserData = entityBits; // 事件回调:Body → 实体位模式反查 - settings.mIsSensor = rb.isSensor; // 传感器:只收 Added/Removed,不解算 + settings.mIsSensor = rb.isTrigger; // 触发器:只收 Added/Removed,不解算 const JPH::BodyID id = bi.CreateAndAddBody( settings, dynamic ? JPH::EActivation::Activate : JPH::EActivation::DontActivate); @@ -873,7 +873,7 @@ namespace Engine { ExtractShapeParams(rb, rec.radius, rec.halfHeight); rec.compound = rb.compound; rec.mass = rb.mass; - rec.isSensor = rb.isSensor; + rec.isTrigger = rb.isTrigger; rec.lastPos = tr.GetPosition(); rec.lastRot = tr.GetRotationQuat(); m_Bodies[entityBits] = rec; diff --git a/Engine/src/Serialization/SceneSerializer.cpp b/Engine/src/Serialization/SceneSerializer.cpp index 441d189..52052db 100644 --- a/Engine/src/Serialization/SceneSerializer.cpp +++ b/Engine/src/Serialization/SceneSerializer.cpp @@ -306,7 +306,7 @@ namespace Engine::Serialization { out << YAML::Key << "Friction" << YAML::Value << rb->friction; out << YAML::Key << "Restitution" << YAML::Value << rb->restitution; - out << YAML::Key << "IsSensor" << YAML::Value << rb->isSensor; + out << YAML::Key << "IsTrigger" << YAML::Value << rb->isTrigger; // bodyId/bodyValid/velocity 由 PhysicsWorld 对账重建,不存 out << YAML::Key << "Active" << YAML::Value << rb->active; out << YAML::EndMap; @@ -616,7 +616,9 @@ namespace Engine::Serialization { rb.gravityScale = n["GravityScale"].as(rb.gravityScale); rb.friction = n["Friction"].as(rb.friction); rb.restitution = n["Restitution"].as(rb.restitution); - rb.isSensor = n["IsSensor"].as(rb.isSensor); + // 新键 IsTrigger;旧场景 IsSensor 兼容读(缺键 as 返回 fallback 安全) + rb.isTrigger = n["IsTrigger"].as( + n["IsSensor"].as(rb.isTrigger)); rb.active = n["Active"].as(true); // bodyId/bodyValid/velocity 保持默认(对账重建) }