diff --git a/App/editor/Editor.cpp b/App/editor/Editor.cpp index f1d2d3c..1de78bc 100644 --- a/App/editor/Editor.cpp +++ b/App/editor/Editor.cpp @@ -17,6 +17,7 @@ #include #include // DockBuilder*(内部 API) +#include #include @@ -38,6 +39,11 @@ void Editor::Init(const EditorContext& ctx) void Editor::Draw() { + // ImGuizmo 每帧首调(官方约定):内部会清 mbOverGizmoHotspot 等 + // 帧级状态——不调则 hover 过一次杆后 hotspot 永久置位,GetMoveType + // 恒返 MT_NONE → 杆可见但永远抓不住(只能看不能拖) + ImGuizmo::BeginFrame(); + // host 窗口:铺满主视口,承载菜单栏 + DockSpace ImGuiViewport* viewport = ImGui::GetMainViewport(); ImGui::SetNextWindowPos(viewport->Pos); diff --git a/App/editor/ViewportPanel.cpp b/App/editor/ViewportPanel.cpp index 997ed71..78a29a1 100644 --- a/App/editor/ViewportPanel.cpp +++ b/App/editor/ViewportPanel.cpp @@ -167,13 +167,19 @@ std::optional ViewportPanel::Draw(const EditorContext &ctx, } // Dynamic 刚体提示:物理每帧把姿态写回 Transform,拖拽即刻 - // 被覆盖(Static/Kinematic 编辑器权威,可直接拖) + // 被覆盖(Static/Kinematic 编辑器权威,可直接拖)。 + // 用 drawlist 叠加而非 ImGui::TextDisabled:后者在 Image 下方 + // 占一行布局 → 滚动条出现/消失循环 → avail 抖动 → 渲染分辨率 + // 每帧重报(视口疯狂顶动);且默认字体无中文字形(显示 ?) if (selected != entt::null) { if (const auto *rb = reg.try_get(selected); rb != nullptr && rb->type == ECS::RigidBodyComponent::BodyType::Dynamic) { - ImGui::TextDisabled( - "(Dynamic body: transform 由物理每帧覆盖)"); + const ImVec2 imgMin = ImGui::GetItemRectMin(); + ImGui::GetWindowDrawList()->AddText( + ImVec2(imgMin.x + 8.0f, imgMin.y + size.y - 20.0f), + IM_COL32(255, 255, 255, 160), + "(Dynamic body: transform driven by physics)"); } }