Unity Avatar换装原理实例

本文向大家介绍Unity换装原理及其简单实现

首先附上效果图:


本文的源码我将上传提供大家下载点击打开链接

实现原理:控制角色SkinMeshRenderer组件的mesh、materials、bones属性来实现角色换装

在该Demo素材中,主角是由多个网格拼接完成

其中网格对象上添加了SkinMeshRenderer组件,并指定了material、mesh、root bone

我们不采用这种方式来渲染角色

我们把角色的全部materials、mesh、bones绑定到一个SkinMeshRenderer上,其中这种做法需要注意的是materials和bones需要一一对应起来,否则渲染紊乱

好的,接下来我将写一个实例实现换装(下载参考源码方便理解)

我们Ctrl+D复制Female对象除了Female_Hips子节点保留(骨骼节点),其他都Delete

在Female节点上添加SkinMeshRenderer组件

首先随机获取到子网格

GameObject go = list[Random.Range(0, list.Count)];

			SkinnedMeshRenderer goSMR = go.GetComponent<SkinnedMeshRenderer>();
			if (goSMR)
			{
				CombineInstance ci = new CombineInstance();
				ci.mesh = goSMR.sharedMesh;
				ciList.Add(ci);
				materialList.AddRange(goSMR.materials);
				//遍历角色所有的骨骼节点来找到相对应得骨骼
				GetBone(goSMR.bones);
			}



其中遍历节点方式是通过节点名字来获取,将获得骨骼节点,通过遍历获得

foreach (Transform x in t)
		{
			foreach (Transform y in allBones)
			{
				if (y.name.Equals(x.name))
				{
					boneList.Add(y);
					break;
				}
			}
		}


最后生成角色蒙皮

mesh = new Mesh();
		mesh.CombineMeshes(ciList.ToArray(),false,false);
		smr.sharedMesh = mesh;

		smr.materials = materialList.ToArray();

		smr.bones = boneList.ToArray();


最终脚本

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值