diff --git a/Assets/UniGLTF/Runtime/UniGLTF/IO/MeshWithRenderer.cs b/Assets/UniGLTF/Runtime/UniGLTF/IO/MeshWithRenderer.cs index 4caee6365..ad7190766 100644 --- a/Assets/UniGLTF/Runtime/UniGLTF/IO/MeshWithRenderer.cs +++ b/Assets/UniGLTF/Runtime/UniGLTF/IO/MeshWithRenderer.cs @@ -82,7 +82,8 @@ namespace UniGLTF { continue; ; } - if (x.Renderer.sharedMaterials == null + if (x.Renderer == null + || x.Renderer.sharedMaterials == null || x.Renderer.sharedMaterials.Length == 0) { continue; diff --git a/Assets/UniGLTF/Tests/UniGLTF/UniGLTFTests.cs b/Assets/UniGLTF/Tests/UniGLTF/UniGLTFTests.cs index 844d26fed..1964dd5af 100644 --- a/Assets/UniGLTF/Tests/UniGLTF/UniGLTFTests.cs +++ b/Assets/UniGLTF/Tests/UniGLTF/UniGLTFTests.cs @@ -600,6 +600,57 @@ namespace UniGLTF } } + [Test] + public void MeshHasNoRendererTest() + { + var go = new GameObject("mesh_has_no_renderer"); + try + { + { + var cube = GameObject.CreatePrimitive(PrimitiveType.Cube); + cube.transform.SetParent(go.transform); + UnityEngine.Object.DestroyImmediate(cube.GetComponent()); + } + + // export + var gltf = new glTF(); + string json; + using (var exporter = new gltfExporter(gltf)) + { + exporter.Prepare(go); + exporter.Export(UniGLTF.MeshExportSettings.Default, AssetTextureUtil.IsTextureEditorAsset, AssetTextureUtil.GetTextureBytesWithMime); + + json = gltf.ToJson(); + } + + Assert.AreEqual(0, gltf.meshes.Count); + Assert.AreEqual(1, gltf.nodes.Count); + Assert.AreEqual(-1, gltf.nodes[0].mesh); + + // import + { + var parser = new GltfParser(); + parser.ParseJson(json, new SimpleStorage(new ArraySegment(new byte[1024 * 1024]))); + + using (var context = new ImporterContext(parser)) + { + context.Load(); + + Assert.AreEqual(1, context.Root.transform.GetChildren().Count()); + + { + var child = context.Root.transform.GetChild(0); + Assert.IsNull(child.GetSharedMesh()); + } + } + } + } + finally + { + GameObject.DestroyImmediate(go); + } + } + [Serializable] class CantConstruct {