直入主題:
1、實驗材料
兩個模型,雖然缺胳膊少腿的,但是能用!!!
2、條件
兩個模型在制作時是基于同一套骨骼,導出模型部位時連着該部位的骨骼一起導出,這樣導入到Unity的模型就帶有SkinnedMeshRenderer元件。
3、目标及實作
目标:将右側的衣服換給左側的模型
代碼:
public SkinnedMeshRenderer HeroSMR; //左側模型衣服部位的SkinnedMeshRenderer
public SkinnedMeshRenderer TargetSMR; //右側模型衣服部位的SkinnedMeshRenderer
void Start()
{
HeroSMR.sharedMesh = TargetSMR.sharedMesh;
HeroSMR.materials = TargetSMR.sharedMaterials;
}
So Easy 是不是!!
4、效果
新Mesh也能很好的适應原先骨骼的變形,反正就是皮換骨不換。
5、結論
蒙過皮帶有骨骼的模型導入u3d後會自動生成SkinnedMeshRenderer元件,存儲了骨骼和Mesh的資訊,比如權重邊界什麼的。
但Mesh和骨骼對應的資訊,比如哪個點受哪根骨骼的影響,這個我覺得是導入骨骼模型後存在了Mesh裡(猜測)。
因為根據我做的實驗,同樣的衣服模型,分别導入帶骨骼的和不帶骨骼的,帶骨骼的如上所示,能正常更換上去,不帶骨骼的代碼如下:
public SkinnedMeshRenderer HeroSMR;
public MeshFilter TargetMF;
public MeshRenderer TargetMR;
void Start()
{
HeroSMR.sharedMesh = TargetMF.sharedMesh;
HeroSMR.materials = TargetMR.sharedMaterials;
}
這樣操作後雖然衣服是換成了,但是位置資訊完全錯誤,也就是Mesh沒和骨骼對應上,是以我猜測Mesh和骨骼對應的資訊是存在Mesh裡的,
僅僅是猜測,不喜勿罵~~~
轉載于:https://www.cnblogs.com/ljx12138/p/6051558.html