mirror of
https://github.com/vrm-c/UniVRM.git
synced 2026-05-11 21:14:19 -05:00
Fix exporter logic that getting node.mesh index #140
This commit is contained in:
parent
dc1e1dab98
commit
1ccef789c4
|
|
@ -587,6 +587,7 @@ namespace UniGLTF
|
|||
{
|
||||
cubeA.transform.SetParent(go.transform);
|
||||
var material = new Material(shader);
|
||||
material.name = "red";
|
||||
material.color = Color.red;
|
||||
cubeA.GetComponent<Renderer>().sharedMaterial = material;
|
||||
}
|
||||
|
|
@ -596,6 +597,7 @@ namespace UniGLTF
|
|||
cubeB.transform.SetParent(go.transform);
|
||||
var material = new Material(shader);
|
||||
material.color = Color.blue;
|
||||
material.name = "blue";
|
||||
cubeB.GetComponent<Renderer>().sharedMaterial = material;
|
||||
|
||||
Assert.AreEqual(cubeB.GetComponent<MeshFilter>().sharedMesh, cubeA.GetComponent<MeshFilter>().sharedMesh);
|
||||
|
|
@ -620,6 +622,10 @@ namespace UniGLTF
|
|||
var blue = gltf.materials[gltf.meshes[1].primitives[0].material];
|
||||
Assert.AreEqual(new float[] { 0, 0, 1, 1 }, blue.pbrMetallicRoughness.baseColorFactor);
|
||||
|
||||
Assert.AreEqual(2, gltf.nodes.Count);
|
||||
|
||||
Assert.AreNotEqual(gltf.nodes[0].mesh, gltf.nodes[1].mesh);
|
||||
|
||||
// import
|
||||
var context = new ImporterContext();
|
||||
context.ParseJson(json, new SimpleStorage(new ArraySegment<byte>(new byte[1024 * 1024])));
|
||||
|
|
@ -627,10 +633,14 @@ namespace UniGLTF
|
|||
context.Load();
|
||||
|
||||
var importedRed = context.Root.transform.GetChild(0);
|
||||
Assert.AreEqual(Color.red, importedRed.GetComponent<Renderer>().sharedMaterial.color);
|
||||
var importedRedMaterial = importedRed.GetComponent<Renderer>().sharedMaterial;
|
||||
Assert.AreEqual("red", importedRedMaterial.name);
|
||||
Assert.AreEqual(Color.red, importedRedMaterial.color);
|
||||
|
||||
var importedBlue = context.Root.transform.GetChild(1);
|
||||
Assert.AreEqual(Color.blue, importedBlue.GetComponent<Renderer>().sharedMaterial.color);
|
||||
var importedBlueMaterial = importedBlue.GetComponent<Renderer>().sharedMaterial;
|
||||
Assert.AreEqual("blue", importedBlueMaterial.name);
|
||||
Assert.AreEqual(Color.blue, importedBlueMaterial.color);
|
||||
}
|
||||
finally
|
||||
{
|
||||
|
|
|
|||
|
|
@ -151,7 +151,7 @@ namespace UniGLTF
|
|||
}
|
||||
|
||||
#region Export
|
||||
static glTFNode ExportNode(Transform x, List<Transform> nodes, List<Mesh> meshes, List<SkinnedMeshRenderer> skins)
|
||||
static glTFNode ExportNode(Transform x, List<Transform> nodes, List<Renderer> renderers, List<SkinnedMeshRenderer> skins)
|
||||
{
|
||||
var node = new glTFNode
|
||||
{
|
||||
|
|
@ -164,16 +164,16 @@ namespace UniGLTF
|
|||
|
||||
if (x.gameObject.activeInHierarchy)
|
||||
{
|
||||
var meshFilter = x.GetComponent<MeshFilter>();
|
||||
if (meshFilter != null)
|
||||
var meshRenderer = x.GetComponent<MeshRenderer>();
|
||||
if (meshRenderer != null)
|
||||
{
|
||||
node.mesh = meshes.IndexOf(meshFilter.sharedMesh);
|
||||
node.mesh = renderers.IndexOf(meshRenderer);
|
||||
}
|
||||
|
||||
var skinnredMeshRenderer = x.GetComponent<SkinnedMeshRenderer>();
|
||||
if (skinnredMeshRenderer != null)
|
||||
{
|
||||
node.mesh = meshes.IndexOf(skinnredMeshRenderer.sharedMesh);
|
||||
node.mesh = renderers.IndexOf(skinnredMeshRenderer);
|
||||
node.skin = skins.IndexOf(skinnredMeshRenderer);
|
||||
}
|
||||
}
|
||||
|
|
@ -244,14 +244,14 @@ namespace UniGLTF
|
|||
Meshes = unityMeshes.Select(x => x.Mesh).ToList();
|
||||
#endregion
|
||||
|
||||
#region Skins
|
||||
#region Nodes and Skins
|
||||
var unitySkins = Nodes
|
||||
.Select(x => x.GetComponent<SkinnedMeshRenderer>()).Where(x =>
|
||||
x != null
|
||||
&& x.bones != null
|
||||
&& x.bones.Length > 0)
|
||||
.ToList();
|
||||
gltf.nodes = Nodes.Select(x => ExportNode(x, Nodes, unityMeshes.Select(y => y.Mesh).ToList(), unitySkins)).ToList();
|
||||
gltf.nodes = Nodes.Select(x => ExportNode(x, Nodes, unityMeshes.Select(y => y.Rendererer).ToList(), unitySkins)).ToList();
|
||||
gltf.scenes = new List<gltfScene>
|
||||
{
|
||||
new gltfScene
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user