From 05157022bdab4ad2ff1fe22d95fc1dbde14ea73f Mon Sep 17 00:00:00 2001 From: ayuan9957 <107920784+ayuan9957@users.noreply.github.com> Date: Fri, 22 May 2026 14:57:10 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=94=AF=E6=8C=81=E9=80=9A=E8=BF=87?= =?UTF-8?q?=E5=88=9B=E5=BB=BA=E5=B9=B3=E9=9D=A2=E5=8A=A0=E8=BD=BD=20Plane.?= =?UTF-8?q?glb=20=E5=B9=B6=E9=87=8D=E6=96=B0=E6=98=A0=E5=B0=84=E5=86=85?= =?UTF-8?q?=E7=BD=AE=20Cube=20=E5=8A=A0=E8=BD=BD=20Cube.glb?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SandboxProject/Assets/Models/Cube.glb.mcmeta | 22 +++++++++++++++++++ SandboxProject/Assets/Models/Plane.glb.mcmeta | 22 +++++++++++++++++++ .../MetaCoreBuiltinCoreServicesModule.cpp | 11 +++++++--- .../Private/MetaCoreBuiltinEditorModule.cpp | 9 ++++++++ .../Private/MetaCoreFilamentSceneBridge.cpp | 11 +++++++--- .../Public/MetaCoreScene/MetaCoreComponents.h | 3 ++- 6 files changed, 71 insertions(+), 7 deletions(-) create mode 100644 SandboxProject/Assets/Models/Cube.glb.mcmeta create mode 100644 SandboxProject/Assets/Models/Plane.glb.mcmeta diff --git a/SandboxProject/Assets/Models/Cube.glb.mcmeta b/SandboxProject/Assets/Models/Cube.glb.mcmeta new file mode 100644 index 0000000..2fce38a --- /dev/null +++ b/SandboxProject/Assets/Models/Cube.glb.mcmeta @@ -0,0 +1,22 @@ +{ + "asset_type": "model", + "guid": "78fa65d0-3631-4cfc-973d-a4af2962c004", + "importer_id": "GltfModelImporter", + "package_path": "Assets/Models/Cube.glb.mcasset", + "source_hash": 2668036311376285448, + "source_path": "Assets/Models/Cube.glb", + "sub_assets": [ + { + "guid": "9cd50d41-df30-26ff-da7e-e01bb57f7135", + "index": 0, + "name": "Cube", + "type": "mesh" + }, + { + "guid": "20a8eca7-ae5b-8ed9-c7a8-b64b59567283", + "index": 0, + "name": "Cube_Material", + "type": "material" + } + ] +} \ No newline at end of file diff --git a/SandboxProject/Assets/Models/Plane.glb.mcmeta b/SandboxProject/Assets/Models/Plane.glb.mcmeta new file mode 100644 index 0000000..d9b1975 --- /dev/null +++ b/SandboxProject/Assets/Models/Plane.glb.mcmeta @@ -0,0 +1,22 @@ +{ + "asset_type": "model", + "guid": "b9ff132c-4c3e-4d51-bf21-eb810482ec51", + "importer_id": "GltfModelImporter", + "package_path": "Assets/Models/Plane.glb.mcasset", + "source_hash": 7189019093832532692, + "source_path": "Assets/Models/Plane.glb", + "sub_assets": [ + { + "guid": "804bca6d-b9ea-f7af-3f0a-f078d5de0d45", + "index": 0, + "name": "Plane", + "type": "mesh" + }, + { + "guid": "6c337003-dc9a-da7c-d685-6d27c673046a", + "index": 0, + "name": "Plane_Material", + "type": "material" + } + ] +} \ No newline at end of file diff --git a/Source/MetaCoreEditor/Private/MetaCoreBuiltinCoreServicesModule.cpp b/Source/MetaCoreEditor/Private/MetaCoreBuiltinCoreServicesModule.cpp index 7e9bc97..c193750 100644 --- a/Source/MetaCoreEditor/Private/MetaCoreBuiltinCoreServicesModule.cpp +++ b/Source/MetaCoreEditor/Private/MetaCoreBuiltinCoreServicesModule.cpp @@ -1655,7 +1655,7 @@ void MetaCoreDrawMeshRendererComponentInspector(MetaCoreEditorContext& editorCon if (meshRenderer.MeshSource == MetaCoreMeshSourceKind::Builtin) { int builtinMeshIndex = static_cast(meshRenderer.BuiltinMesh); - const char* builtinMeshItems[] = {"Cube"}; + const char* builtinMeshItems[] = {"Cube", "Plane"}; if (ImGui::Combo("Builtin Mesh", &builtinMeshIndex, builtinMeshItems, IM_ARRAYSIZE(builtinMeshItems))) { MetaCoreTrackComponentInspectorEdit(editorContext, "修改检查器属性", false); const MetaCoreBuiltinMeshType builtinMesh = static_cast(builtinMeshIndex); @@ -5723,7 +5723,12 @@ std::optional MetaCoreBuiltinSceneEditingService::CreateGameObject( MetaCoreGameObject object = editorContext.GetScene().CreateGameObject(objectName, parentId); if (withMeshRenderer) { - object.AddComponent(MetaCoreMeshRendererComponent{}); + auto& meshRenderer = object.AddComponent(MetaCoreMeshRendererComponent{}); + if (objectName == "Plane") { + meshRenderer.BuiltinMesh = MetaCoreBuiltinMeshType::Plane; + } else { + meshRenderer.BuiltinMesh = MetaCoreBuiltinMeshType::Cube; + } object.GetComponent().Position = glm::vec3(0.0F, 0.5F, 0.0F); } @@ -5740,7 +5745,7 @@ std::optional MetaCoreBuiltinSceneEditingService::CreateGameObject( editorContext.AddConsoleMessage( MetaCoreLogLevel::Info, "Scene", - withMeshRenderer ? "已创建立方体对象" : "已创建空对象" + withMeshRenderer ? (objectName == "Plane" ? "已创建平面对象" : "已创建立方体对象") : "已创建空对象" ); return createdObjectId; } diff --git a/Source/MetaCoreEditor/Private/MetaCoreBuiltinEditorModule.cpp b/Source/MetaCoreEditor/Private/MetaCoreBuiltinEditorModule.cpp index ba1f77e..3d44448 100644 --- a/Source/MetaCoreEditor/Private/MetaCoreBuiltinEditorModule.cpp +++ b/Source/MetaCoreEditor/Private/MetaCoreBuiltinEditorModule.cpp @@ -1907,6 +1907,9 @@ public: if (ImGui::MenuItem("创建立方体")) { (void)MetaCoreCreateObject(editorContext, "Cube", true, std::nullopt); } + if (ImGui::MenuItem("创建平面")) { + (void)MetaCoreCreateObject(editorContext, "Plane", true, std::nullopt); + } ImGui::Separator(); if (ImGui::MenuItem("应用当前 Prefab", nullptr, false, editorContext.GetActiveObjectId() != 0)) { (void)MetaCoreApplySelectedPrefabInstance(editorContext); @@ -2098,6 +2101,9 @@ private: if (ImGui::MenuItem("创建立方体")) { (void)MetaCoreCreateObject(editorContext, "Cube", true, objectId); } + if (ImGui::MenuItem("创建平面")) { + (void)MetaCoreCreateObject(editorContext, "Plane", true, objectId); + } ImGui::Separator(); if (gameObject && gameObject.HasComponent() && @@ -2150,6 +2156,9 @@ private: if (ImGui::MenuItem("创建立方体")) { (void)MetaCoreCreateObject(editorContext, "Cube", true, 0); } + if (ImGui::MenuItem("创建平面")) { + (void)MetaCoreCreateObject(editorContext, "Plane", true, 0); + } ImGui::Separator(); if (ImGui::MenuItem("重命名", "F2", false, editorContext.GetActiveObjectId() != 0)) { BeginRename(editorContext, editorContext.GetActiveObjectId()); diff --git a/Source/MetaCoreRender/Private/MetaCoreFilamentSceneBridge.cpp b/Source/MetaCoreRender/Private/MetaCoreFilamentSceneBridge.cpp index 69d6db7..0ef7856 100644 --- a/Source/MetaCoreRender/Private/MetaCoreFilamentSceneBridge.cpp +++ b/Source/MetaCoreRender/Private/MetaCoreFilamentSceneBridge.cpp @@ -401,7 +401,8 @@ public: std::unordered_set activeHostRootIds; for (const auto& renderable : snapshot.Renderables) { if (renderable.MeshSource == MetaCoreMeshSourceKind::Asset || - (renderable.MeshSource == MetaCoreMeshSourceKind::Builtin && renderable.BuiltinMesh == MetaCoreBuiltinMeshType::Cube)) { + (renderable.MeshSource == MetaCoreMeshSourceKind::Builtin && + (renderable.BuiltinMesh == MetaCoreBuiltinMeshType::Cube || renderable.BuiltinMesh == MetaCoreBuiltinMeshType::Plane))) { if (renderable.HostRootId != 0) { activeHostRootIds.insert(renderable.HostRootId); } @@ -479,8 +480,12 @@ public: if (modelPath.empty() && !renderable.SourceModelPath.empty()) { modelPath = renderable.SourceModelPath; } - if (modelPath.empty() && renderable.MeshSource == MetaCoreMeshSourceKind::Builtin && renderable.BuiltinMesh == MetaCoreBuiltinMeshType::Cube) { - modelPath = "Assets/Models/box1.glb"; + if (modelPath.empty() && renderable.MeshSource == MetaCoreMeshSourceKind::Builtin) { + if (renderable.BuiltinMesh == MetaCoreBuiltinMeshType::Cube) { + modelPath = "Assets/Models/Cube.glb"; + } else if (renderable.BuiltinMesh == MetaCoreBuiltinMeshType::Plane) { + modelPath = "Assets/Models/Plane.glb"; + } } if (modelPath.empty()) { continue; diff --git a/Source/MetaCoreScene/Public/MetaCoreScene/MetaCoreComponents.h b/Source/MetaCoreScene/Public/MetaCoreScene/MetaCoreComponents.h index c715afd..5626ec8 100644 --- a/Source/MetaCoreScene/Public/MetaCoreScene/MetaCoreComponents.h +++ b/Source/MetaCoreScene/Public/MetaCoreScene/MetaCoreComponents.h @@ -14,7 +14,8 @@ namespace MetaCore { MC_ENUM() enum class MetaCoreBuiltinMeshType { - Cube + Cube, // 立方体网格 + Plane // 平面网格 }; MC_ENUM()