feat: 支持通过创建平面加载 Plane.glb 并重新映射内置 Cube 加载 Cube.glb

This commit is contained in:
ayuan9957 2026-05-22 14:57:10 +08:00
parent a6e7070c41
commit 05157022bd
6 changed files with 71 additions and 7 deletions

View File

@ -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"
}
]
}

View File

@ -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"
}
]
}

View File

@ -1655,7 +1655,7 @@ void MetaCoreDrawMeshRendererComponentInspector(MetaCoreEditorContext& editorCon
if (meshRenderer.MeshSource == MetaCoreMeshSourceKind::Builtin) {
int builtinMeshIndex = static_cast<int>(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<MetaCoreBuiltinMeshType>(builtinMeshIndex);
@ -5723,7 +5723,12 @@ std::optional<MetaCoreId> MetaCoreBuiltinSceneEditingService::CreateGameObject(
MetaCoreGameObject object = editorContext.GetScene().CreateGameObject(objectName, parentId);
if (withMeshRenderer) {
object.AddComponent<MetaCoreMeshRendererComponent>(MetaCoreMeshRendererComponent{});
auto& meshRenderer = object.AddComponent<MetaCoreMeshRendererComponent>(MetaCoreMeshRendererComponent{});
if (objectName == "Plane") {
meshRenderer.BuiltinMesh = MetaCoreBuiltinMeshType::Plane;
} else {
meshRenderer.BuiltinMesh = MetaCoreBuiltinMeshType::Cube;
}
object.GetComponent<MetaCoreTransformComponent>().Position = glm::vec3(0.0F, 0.5F, 0.0F);
}
@ -5740,7 +5745,7 @@ std::optional<MetaCoreId> MetaCoreBuiltinSceneEditingService::CreateGameObject(
editorContext.AddConsoleMessage(
MetaCoreLogLevel::Info,
"Scene",
withMeshRenderer ? "已创建立方体对象" : "已创建空对象"
withMeshRenderer ? (objectName == "Plane" ? "已创建平面对象" : "已创建立方体对象") : "已创建空对象"
);
return createdObjectId;
}

View File

@ -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<MetaCoreMeshRendererComponent>() &&
@ -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());

View File

@ -401,7 +401,8 @@ public:
std::unordered_set<MetaCoreId> 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;

View File

@ -14,7 +14,8 @@ namespace MetaCore {
MC_ENUM()
enum class MetaCoreBuiltinMeshType {
Cube
Cube, // 立方体网格
Plane // 平面网格
};
MC_ENUM()