Add null check to MeshWithRenderer

This commit is contained in:
oO
2021-05-01 16:37:02 +09:00
parent 24062adb5b
commit e0445e3b88
2 changed files with 53 additions and 1 deletions

View File

@@ -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;

View File

@@ -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<MeshRenderer>());
}
// 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<byte>(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
{