Unity3D:在运行时减少骨骼数量
我在模拟人生中创造了一个角色,你可以给角色添加不同的衣服 我使用的所有模型都使用相同的骨骼和装备。我将这些模型放在不同的资产包中。在运行时,我阅读资产包并将这些模型组合到一个SkindMesh渲染器中,从而组合到一个对象中。但每次我添加另一个对象时,骨骼数都会增加 我知道为什么会发生这种情况,但我想再次减少骨骼的数量。 我试图找到重复的骨骼,并将它们和bindpose删除到与删除的骨骼相同的索引上,但这仍然会给我错误“bindpose的数量与骨骼的数量不匹配”,即使它们都是45 以下是附加模型的代码:Unity3D:在运行时减少骨骼数量,unity3d,Unity3d,我在模拟人生中创造了一个角色,你可以给角色添加不同的衣服 我使用的所有模型都使用相同的骨骼和装备。我将这些模型放在不同的资产包中。在运行时,我阅读资产包并将这些模型组合到一个SkindMesh渲染器中,从而组合到一个对象中。但每次我添加另一个对象时,骨骼数都会增加 我知道为什么会发生这种情况,但我想再次减少骨骼的数量。 我试图找到重复的骨骼,并将它们和bindpose删除到与删除的骨骼相同的索引上,但这仍然会给我错误“bindpose的数量与骨骼的数量不匹配”,即使它们都是45 以下是附加模型的
private void UpdateSkinnedMesh()
{
float startTime = Time.realtimeSinceStartup;
// Create a list of for all data
List combineInstances = new List();
List materials = new List();
List bones = new List();
Transform[] transforms = baseModel.GetComponentsInChildren();
//TEMP
List elements = new List();
elements.Add(body);
if(_currentActiveProps.ContainsKey(ItemSubCategory.Skin))
elements.Add(tutu);
//Go over all active elements
foreach (CharacterElement element in elements)
{
//Get the skinned mesh renderer
SkinnedMeshRenderer smr = element.GetSkinnedMeshRenderer();
//Add materials to the entire list
materials.AddRange(smr.materials);
//Add all submeshes to a combined mesh
for (int sub = 0; sub < smr.sharedMesh.subMeshCount; sub++)
{
CombineInstance ci = new CombineInstance();
ci.mesh = smr.sharedMesh;
ci.subMeshIndex = sub;
combineInstances.Add(ci);
}
//Bones are not saved in asset bundle, get the names and reference them again
foreach (string bone in element.GetBoneNames())
{
foreach (Transform transform in transforms)
{
if (transform.name != bone) continue;
bones.Add(transform);
break;
}
}
//Destroy the temp object
Destroy(smr.gameObject);
}
//Get skinned mesh renderer
SkinnedMeshRenderer r = baseModel.GetComponentInChildren();
//Create enew combined mesh
r.sharedMesh = new Mesh();
r.sharedMesh.CombineMeshes(combineInstances.ToArray(), false, false);
//Add bones and materials
r.bones = bones.ToArray();
r.materials = materials.ToArray();
Debug.Log("Bindposes: " + r.sharedMesh.bindposes.Length);
Debug.Log("Generating character took: " + (Time.realtimeSinceStartup - startTime) * 1000 + " ms");
Debug.Log("Bone count: " + r.bones.Length);
}
private void UpdateSkinnedMesh()
{
float startTime=Time.realtimeSinceStartup;
//为所有数据创建一个列表
List combineInstances=new List();
列表材质=新列表();
列表骨骼=新列表();
Transform[]transforms=baseModel.GetComponentsInChildren();
//临时工
列表元素=新列表();
元素。添加(正文);
if(_currentActiveProps.ContainsKey(ItemSubCategory.Skin))
增加(图图);
//检查所有活动元素
foreach(元素中的字符元素)
{
//获取蒙皮网格渲染器
SkinnedMeshRenderer smr=element.GetSkinnedMeshRenderer();
//将材质添加到整个列表中
材料添加范围(smr材料);
//将所有子网格添加到组合网格
对于(int sub=0;sub
我已经问了关于Unity答案的问题,但因为主持人需要几个小时才能批准该问题,所以我也想在这里尝试。我也面临同样的问题。你找到解决办法了吗?