Объявление
public NativeArrayВозвращает
NativeArray
Описание
Количество ненулевых весов костей для каждой вершины.
Размер возвращаемого массива равен Mesh.vertexCount или равен нулю. Массив отсортирован в порядке индекса вершины.
Используйте в сочетании с Mesh.GetAllBoneWeights, чтобы получить веса костей для вершин в сетке.
Смотрите так же: Mesh.GetAllBoneWeights, Mesh.SetBoneWeights, ModelImporter.maxBonesPerVertex, QualitySettings.skinWeights, SkinnedMeshRenderer.quality.
using UnityEngine;
public class TestSkinnedMesh : MonoBehaviour {
void Start()
{
// Get a reference to the mesh
var skinnedMeshRenderer = GetComponent<SkinnedMeshRenderer>();
var mesh = skinnedMeshRenderer.sharedMesh;
// Get the number of bone weights per vertex
var bonesPerVertex = mesh.GetBonesPerVertex();
if (bonesPerVertex.Length == 0)
{
return;
}
// Get all the bone weights, in vertex index order
var boneWeights = mesh.GetAllBoneWeights();
// Keep track of where we are in the array of BoneWeights, as we iterate over the vertices
var boneWeightIndex = 0;
// Iterate over the vertices
for (var vertIndex = 0; vertIndex < mesh.vertexCount; vertIndex++)
{
var totalWeight = 0f;
var numberOfBonesForThisVertex = bonesPerVertex[vertIndex];
Debug.Log("This vertex has " + numberOfBonesForThisVertex + " bone influences");
// For each vertex, iterate over its BoneWeights
for (var i = 0; i < numberOfBonesForThisVertex; i++)
{
var currentBoneWeight = boneWeights[boneWeightIndex];
totalWeight += currentBoneWeight.weight;
if (i > 0)
{
Debug.Assert(boneWeights[boneWeightIndex - 1].weight >= currentBoneWeight.weight);
}
boneWeightIndex++;
}
Debug.Assert(Mathf.Approximately(1f, totalWeight));
}
}
}