【SiKi学院Unity】Unity换装系统【上】 【SiKi学院Unity】Unity换装系统【中】 【SiKi学院Unity】Unity换装系统【下】 课程资料.zip (71.93MB)
unity游戏换装系统【该全集有杂音】
原理
一个隐藏的,”穿着所有衣服“的模型 一个只有模型的骨骼的Target 给Target创建了6个部位,换装就是到模型那里取Transform,SkinnedMeshRenderer,加组件到部位节点上
04 游戏场景搭建
//Assets/Assets/Sources/Character/characters/prefabs //删除其他部位,只保留根节点 //跟模型(拖一份新的)一起放Resources
05 换装资源以及换装骨骼的加载
动画循环
//是下不是上
代码
public class AvatarSys : MonoBehaviour
{
[Tooltip("模型")] private GameObject model;
[Tooltip("模型位置")] private Transform modelTrans;
//
[Tooltip("目标骨架")] private GameObject target;
[Tooltip("骨骼信息")] private Transform[] hipArr;
[Tooltip("多个部位,多件装")] private Dictionary
// Start is called before the first frame update
void Start()
{
InstantiateModel("FemaleModel");
InstantiateTarget("FemaleTarget");
}
///
void InstantiateModel(string name)
{
GameObject go = Instantiate(Resources.Load(name)) as GameObject;
modelTrans = go.transform;
go.SetActive(false);
}
///
void InstantiateTarget(string name)
{
target= Instantiate(Resources.Load(name)) as GameObject;
hipArr = target.GetComponentsInChildren
}
}
效果
//需要模型位置跟骨骼位置(在屋里),就赋值粘贴Transform
06 换装信息的数据存储
背景
//它的一个model是如下的命名
代码
public class AvatarSys : MonoBehaviour
{
void Start()
{
SaveDictionary();
}
///
void SaveDictionary()
{
SkinnedMeshRenderer[] clothes = modelTrans.GetComponentsInChildren
//比如eyes-1,取eyes(只取一次),拼成一套的部位部位
for (int i = 0; i < clothes.Length ; i++)
{
string[] nameArr=clothes[i].name.Split('-');
string part = nameArr[0];
string cloth = nameArr[1];
if (fixedPartDictionary.ContainsKey(part) == false)//部位字典里没有该部位
{
GameObject go = new GameObject();
go.name = part;
go.transform.parent = target.transform;
fixedPartDictionary.Add(part, go.AddComponent
partsDictionary.Add(part, new Dictionary
}
partsDictionary[ part ].Add(cloth, clothes[i]);//衣服字典都Add
}
}
}
效果
07 换装代码的逻辑实现
骨骼的Transform
代码
///
void ChangeCloth(string part, string clothNum)
{
//选择一件衣服
SkinnedMeshRenderer newCloth = partsDictionary[part][clothNum];
//看衣服穿在哪里
List
foreach (var bone in newCloth.bones)//新衣服
{
foreach (var hip in hipArr)//目标骨骼。身上部位
{
if (bone.name
单独的近反义词新无影剑艾格斯哪里爆?新无影爆率与超强属性