static glTFNode ExportNode(Transform x, List <Transform> nodes, List <Renderer> renderers, List <SkinnedMeshRenderer> skins) { var node = new glTFNode { name = x.name, children = x.transform.GetChildren().Select(y => nodes.IndexOf(y)).ToArray(), rotation = x.transform.localRotation.ToArray(), translation = x.transform.localPosition.ToArray(), scale = x.transform.localScale.ToArray(), }; if (node.children.Any() == false) { node.children = null; } //if (x.gameObject.activeInHierarchy) { var meshRenderer = x.GetComponent <MeshRenderer>(); if (meshRenderer != null) { node.mesh = renderers.IndexOf(meshRenderer); } var skinnedMeshRenderer = x.GetComponent <SkinnedMeshRenderer>(); if (skinnedMeshRenderer != null) { node.mesh = renderers.IndexOf(skinnedMeshRenderer); node.skin = skins.IndexOf(skinnedMeshRenderer); } } return(node); }
public static GameObject ImportNode(glTFNode node, int nodeIndex) { var nodeName = node.name; if (!string.IsNullOrEmpty(nodeName) && nodeName.Contains("/")) { Debug.LogWarningFormat("node {0} contains /. replace _", node.name); nodeName = nodeName.Replace("/", "_"); } if (string.IsNullOrEmpty(nodeName)) { nodeName = string.Format("nodeIndex_{0}", nodeIndex); } var go = new GameObject(nodeName); // // transform // if (node.translation != null && node.translation.Length > 0) { go.transform.localPosition = new Vector3( node.translation[0], node.translation[1], node.translation[2]); } if (node.rotation != null && node.rotation.Length > 0) { go.transform.localRotation = new Quaternion( node.rotation[0], node.rotation[1], node.rotation[2], node.rotation[3]); } if (node.scale != null && node.scale.Length > 0) { go.transform.localScale = new Vector3( node.scale[0], node.scale[1], node.scale[2]); } if (node.matrix != null && node.matrix.Length > 0) { var m = UnityExtensions.MatrixFromArray(node.matrix); go.transform.localRotation = m.ExtractRotation(); go.transform.localPosition = m.ExtractPosition(); go.transform.localScale = m.ExtractScale(); } return(go); }