У меня есть модель персонажа со скином, которая импортирована из файла FBX. В режиме игры статистика показывает, что эта модель имеет 13,5 тыс. Вершин. С приложенным ниже сценарием статистика показывает, что модель использует только 4.4k вершин.
Сценарий добавляет SkinnedMeshRenderer к игровому объекту модели, а затем копирует все соответствующие данные me sh из исходного SkinnedMeshRenderer (дочернего объекта gameobject ) к вновь добавленному.
В исходной модели есть несколько одинаковых материалов (кроме волос), а в копии просто используется один материал (выглядит нормально, за исключением волос, конечно).
Может кто-нибудь объяснить, почему копия имеет намного меньшее количество вершин, чем оригинал?
using UnityEngine;
public class CopyMesh : MonoBehaviour
{
void Start()
{
// original
SkinnedMeshRenderer originalSkin = transform.GetComponentInChildren<SkinnedMeshRenderer>();
Mesh originalMesh = originalSkin.sharedMesh;
// copy
SkinnedMeshRenderer copySkin = transform.gameObject.AddComponent<SkinnedMeshRenderer>();
Mesh copyMesh = new Mesh();
// set up copy's SkinnedMeshRenderer
copySkin.sharedMesh = copyMesh;
copySkin.material = originalSkin.materials[0];
copySkin.bones = originalSkin.bones;
copySkin.rootBone = originalSkin.rootBone;
// copy over required vertex data
copyMesh.bindposes = originalMesh.bindposes;
copyMesh.vertices = originalMesh.vertices;
copyMesh.normals = originalMesh.normals;
copyMesh.uv = originalMesh.uv;
copyMesh.boneWeights = originalMesh.boneWeights;
copyMesh.triangles = originalMesh.triangles;
// disable original SkinnedMeshRenderer so that only the copy shows up
originalSkin.enabled = false;
}
}