Моя настройка:
Количество префабов N объединено в новый GameObject.Затем это объединяется в одну основную сетку, состоящую из количества подмешиваний материала М.
Форма стоит вверх по оси Y и представляет собой связку рук.Цель состоит в том, чтобы переместить их, добавив кости.
Я не смог найти много примеров того, как правильно назначить кости процедурной сетке, которая не является простым кубом.
Проблема заключается в присвоении вершин весам.Я бы хотел, чтобы у вершин преобразования Y = 0 не было веса, а у самых дальних вершин Y = был полный вес.Я не уверен, как назначение должно быть сделано .. Есть указатели?:)
Пока что преобразования нижней и верхней кости находятся в нужном месте, но при перемещении их сетка не изгибается, как я надеялся, в хорошей кривой, половина вершин просто перемещается равномернос тонкой сетчатой линией, соединяющей две половины.
private void _AddBones()
{
if(m_SkinnedRenderer != null)
{
// Make bone weight for vertices
BoneWeight[] weights = new BoneWeight[m_MainMesh.vertexCount];
int halfway = (weights.Length / 2);
for (int i = 0; i < weights.Length; i++)
{
if(i < halfway)
{
weights[i].boneIndex0 = 0;
weights[i].weight0 = 1;
}
else
{
weights[i].boneIndex0 = 1;
weights[i].weight0 = 1;
}
}
m_MainMesh.boneWeights = weights;
// Make bones and bind poses
Transform[] bones = new Transform[2];
Matrix4x4[] bindPoses = new Matrix4x4[2];
bones[0] = new GameObject("Lower Bone").transform;
bones[0].parent = m_MergedRoot.transform;
bones[0].localRotation = Quaternion.identity;
bones[0].localPosition = Vector3.zero;
bindPoses[0] = bones[0].worldToLocalMatrix * m_MergedRoot.transform.localToWorldMatrix;
bones[1] = new GameObject("Upper Bone").transform;
bones[1].parent = m_MergedRoot.transform;
bones[1].localRotation = Quaternion.identity;
bones[1].localPosition = new Vector3(0, 1.5f, 0);
bindPoses[1] = bones[1].worldToLocalMatrix * m_MergedRoot.transform.localToWorldMatrix;
m_MainMesh.bindposes = bindPoses;
m_SkinnedRenderer.bones = bones;
m_SkinnedRenderer.sharedMesh = m_MainMesh;
m_SkinnedRenderer.rootBone = bones[0];
}
}