Exemple #1
0
        public void usdiSetupComponents(UsdMesh parent)
        {
            if (!m_setupRequierd)
            {
                return;
            }
            m_setupRequierd = false;

            GameObject go;

            if (m_nth == 0)
            {
                go = parent.gameObject;
            }
            else
            {
                string name   = "Submesh[" + m_nth + "]";
                var    ptrans = parent.GetComponent <Transform>();
                var    child  = ptrans.FindChild(name);
                if (child != null)
                {
                    go = child.gameObject;
                }
                else
                {
                    go = new GameObject(name);
                    go.GetComponent <Transform>().SetParent(parent.GetComponent <Transform>(), false);
                }
            }

            m_trans = go.GetComponent <Transform>();

            var  meshSummary           = parent.meshSummary;
            var  meshData              = parent.meshData;
            bool assignDefaultMaterial = false;

            if (meshSummary.num_bones > 0)
            {
                // setup SkinnedMeshRenderer

                var renderer = usdi.GetOrAddComponent <SkinnedMeshRenderer>(go, ref assignDefaultMaterial);
                m_renderer = renderer;
                usdiSetupBones(parent, ref meshData);

                if (renderer.sharedMesh != null && parent.master == null && renderer.sharedMesh.name.IndexOf("<dyn>") == 0)
                {
                    m_umesh = renderer.sharedMesh;
                }
                else
                {
                    m_umesh             = usdiShareOrCreateMesh(parent);
                    renderer.sharedMesh = m_umesh;
                }
                m_umesh.MarkDynamic();
            }
            else
            {
                // setup MeshFilter and MeshRenderer

                var meshFilter = usdi.GetOrAddComponent <MeshFilter>(go);
                if (meshFilter.sharedMesh != null && parent.master == null && meshFilter.sharedMesh.name.IndexOf("<dyn>") == 0)
                {
                    m_umesh = meshFilter.sharedMesh;
                }
                else
                {
                    m_umesh = usdiShareOrCreateMesh(parent);
                    meshFilter.sharedMesh = m_umesh;
                }
                m_umesh.MarkDynamic();

                m_renderer = usdi.GetOrAddComponent <MeshRenderer>(go, ref assignDefaultMaterial);
            }

#if UNITY_EDITOR
            if (assignDefaultMaterial)
            {
                Material[] materials = null;
                if (m_nth != 0)
                {
                    var s = parent.submeshes[0];
                    if (s.renderer != null)
                    {
                        materials = s.renderer.sharedMaterials;
                    }
                }
                if (materials == null)
                {
                    materials         = new Material[] { UnityEngine.Object.Instantiate(GetDefaultMaterial()) };
                    materials[0].name = "Material_0";
                }
                m_renderer.sharedMaterials = materials;
            }
#endif
        }