Мне надо менять 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;
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;