[РЕШЕНО] SkinnedMeshRenderer.sharedMesh ==нету меша!

Программирование на Юнити.

[РЕШЕНО] SkinnedMeshRenderer.sharedMesh ==нету меша!

Сообщение gnoblin 19 мар 2010, 14:07

Проблема: гружу скинед меш из ассет бандля.

Мне надо менять UV координаты в меше человечка, но проблема в том что доступ есть только к sharedMesh -то есть модифицируется изначальный ассет (из проекта или закачанный с бандлем).
Меня это немного не устраивает...

Синтаксис:
Используется csharp
GameObject newmesh_test = new GameObject("newmesh_test", typeof(MeshFilter), typeof(MeshRenderer));

            Mesh new_mesh = new Mesh();
            Vector3[] verts;
            Vector3[] norms;
            int[] tris;
            Vector2[] uvs;


            int c0 = smr.sharedMesh.vertices.Length;
            verts = new Vector3[c0];
            norms = new Vector3[c0];
            //new_mesh.colors = new Color[c0];
            uvs = new Vector2[c0];
            //?
            //new_mesh.tangents = new Vector4[c0];
            for (int a = 0; a < c0; a++)
            {
                verts[a] = smr.sharedMesh.vertices[a];
                norms[a] = smr.sharedMesh.normals[a];
                //new_mesh.colors[a] = smr.sharedMesh.colors[a];
                uvs[a] = smr.sharedMesh.uv[a];
                //?
                //new_mesh.tangents[a] = smr.sharedMesh.tangents[a];
            }

            int tri_length = smr.sharedMesh.triangles.Length;
            tris = new int[tri_length];
            for (int a = 0; a < tri_length; a++)
            {
                tris[a] = smr.sharedMesh.triangles[a];
            }

            int c1 = smr.sharedMesh.bindposes.Length;
            Matrix4x4[] binds = new Matrix4x4[c1];
            for (int a = 0; a < c1; a++)
                binds[a] = smr.sharedMesh.bindposes[a];

            int c2 = smr.sharedMesh.boneWeights.Length;
            BoneWeight[] weights = new BoneWeight[c2];
            for (int a = 0; a < c2; a++)
                weights[a] = smr.sharedMesh.boneWeights[a];

            new_mesh.subMeshCount = smr.sharedMesh.subMeshCount;
           
            new_mesh.RecalculateNormals();
            new_mesh.RecalculateBounds();
            //new_mesh.Optimize();

            new_mesh.vertices = verts;
            new_mesh.normals = norms;
            new_mesh.triangles = tris;
            new_mesh.uv = uvs;
            new_mesh.bindposes = binds;
            new_mesh.boneWeights = weights;
           

            newmesh_test.GetComponent<MeshFilter>().mesh = new_mesh;
            smr.sharedMesh = new_mesh;
skypeid: madkust
Мои крайние проекты:
Убойный Хоккей
Cube Day Z (альфа)
Аватара пользователя
gnoblin
Адепт
 
Сообщения: 4633
Зарегистрирован: 08 окт 2008, 17:23
Откуда: Минск, Беларусь
Skype: madkust
  • Сайт

Re: SkinnedMeshRenderer.sharedMesh & new Mesh()==нету меша!

Сообщение gnoblin 19 мар 2010, 16:56

Не знаю где я затупил изначально...
Сделал обходной маневр с комбайном запчасти перса еще в один меш...
В итоге генерация перса получается за 30ms )).

Синтаксис:
Используется csharp
combineInstances = new List<CombineInstance>();
            for (int sub = 0; sub < smr.sharedMesh.subMeshCount; sub++)
            {
                CombineInstance ci = new CombineInstance();
                ci.mesh = smr.sharedMesh;
                ci.subMeshIndex = sub;
                combineInstances.Add(ci);
            }
            smr.sharedMesh = new Mesh();
            smr.sharedMesh.CombineMeshes(combineInstances.ToArray(), true, false);
skypeid: madkust
Мои крайние проекты:
Убойный Хоккей
Cube Day Z (альфа)
Аватара пользователя
gnoblin
Адепт
 
Сообщения: 4633
Зарегистрирован: 08 окт 2008, 17:23
Откуда: Минск, Беларусь
Skype: madkust
  • Сайт


Вернуться в Скрипты

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2


cron