コード例 #1
0
ファイル: gltfExporter.cs プロジェクト: bmjoy/VGO
        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);
        }
コード例 #2
0
        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);
        }