如何用C#脚本将FBX导入的游戏对象网格赋予新建对象?
解决方法
要把FBX里的指定网格赋值给新创建的newTarget对象,你需要先从加载的FBX对象中找到对应网格,再给newTarget添加必要组件并完成赋值,具体步骤和代码如下:
- 首先确认FBX对象中网格的位置:通常FBX导入后,网格会存在于名为“Icosphere”的子对象的
MeshFilter组件中,也可能直接在FBX根对象上,按需选择对应逻辑。 - 给
newTarget添加MeshFilter(承载网格)和MeshRenderer(负责渲染)组件,再将目标网格赋值给MeshFilter的mesh属性,可选复用FBX的材质保证渲染效果。
修改后的代码示例:
GameObject newTarget = new GameObject("NewTarget"); // 加载FBX时无需后缀名.fbx,Unity会自动识别资源 GameObject fbxObject = Resources.Load<GameObject>("Objects/Targets/target"); // 场景1:网格在FBX的子对象"Icosphere"上 Transform icosphereTransform = fbxObject.transform.Find("Icosphere"); if (icosphereTransform != null) { MeshFilter fbxMeshFilter = icosphereTransform.GetComponent<MeshFilter>(); if (fbxMeshFilter != null && fbxMeshFilter.mesh != null) { MeshFilter newMeshFilter = newTarget.AddComponent<MeshFilter>(); newMeshFilter.mesh = fbxMeshFilter.mesh; // 可选:添加渲染组件并复用原材质 MeshRenderer newMeshRenderer = newTarget.AddComponent<MeshRenderer>(); newMeshRenderer.material = icosphereTransform.GetComponent<MeshRenderer>().material; } } // 场景2:网格直接在FBX根对象上,可使用以下代码 /* MeshFilter fbxMeshFilter = fbxObject.GetComponent<MeshFilter>(); if (fbxMeshFilter != null && fbxMeshFilter.mesh != null) { MeshFilter newMeshFilter = newTarget.AddComponent<MeshFilter>(); newMeshFilter.mesh = fbxMeshFilter.mesh; MeshRenderer newMeshRenderer = newTarget.AddComponent<MeshRenderer>(); newMeshRenderer.material = fbxObject.GetComponent<MeshRenderer>().material; } */
- 额外优化:如果你的FBX是将网格作为独立资源导入(而非GameObject),可以直接用
Resources.Load<Mesh>("Objects/Targets/Icosphere")加载网格,跳过GameObject的查找步骤,效率更高。
内容的提问来源于stack exchange,提问作者Hope
相关产品推荐
相关产品推荐

