Мои Уведомления
Привет, !
Мой Аккаунт Мои Финансы Мои Подписки Мои Настройки Выход
Руководство API скрипты

Объявление

public NativeArray GetAllBoneWeights();

Возвращает

NativeArray Возвращает все ненулевые веса костей для сетки в порядке индексов вершин.

Описание

Получает веса костей для сетки.

Используйте Mesh.GetBonesPerVertex, чтобы получить количество ненулевых весов для каждой вершины, а затем используйте его для итерации по этим данным.

Для каждой вершины структуры BoneWeight1 сортируются по BoneWeight1.weight в порядке убывания.

Смотрите так же: Mesh.SetBoneWeights, Mesh.GetBonesPerVertex, Mesh.boneWeights, Mesh.GetBoneWeightsModelImporter.maxBonesPerVertex, QualitySettings.skinWeights, SkinnedMeshRenderer.quality.

using UnityEngine; public class TestSkinnedMesh : MonoBehaviour { void Start() { // Получить ссылку на меш var skinnedMeshRenderer = GetComponent<SkinnedMeshRenderer>(); var mesh = skinnedMeshRenderer.sharedMesh; // Получаем количество весов костей на вершину var bonesPerVertex = mesh.GetBonesPerVertex(); if (bonesPerVertex.Length == 0) { return; } // Получить все веса костей в порядке индекса вершины var boneWeights = mesh.GetAllBoneWeights(); // Keep track of where we are in the array of BoneWeights, as we iterate over the vertices var boneWeightIndex = 0; // Перебираем вершины for (var vertIndex = 0; vertIndex < mesh.vertexCount; vertIndex++) { var totalWeight = 0f; var numberOfBonesForThisVertex = bonesPerVertex[vertIndex]; Debug.Log("This vertex has " + numberOfBonesForThisVertex + " bone influences"); // Для каждой вершины перебрать ее 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)); } } }
Вы можете отблагодарить автора, за перевод документации на русский язык. ₽ Спасибо
API скрипты 2021.3