关于Unity的换装,网上有几篇文章,我之前也简单的描述过实现。不过那个时候只是粗略的试验了下。今天好好梳理了下代码。
先上代码(自己的游戏项目,不是公司的,所以放心的贴上项目代码了,部分引用到其他的功能文件,但是核心代码无影响,这里主要看一下细节和思路)
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public enum AvatarPart
{
helmet,
chest,
shoulders,
gloves,
boots,
}
// 人物换装
public class ActorAvatar : MonoBehaviour
{
// 换装的部件信息
public class AvatarInfo
{
public string partName;
public GameObject defaultPart;
public GameObject avatarPart;
}
protected int _bodyModelId;
protected GameObject _body; // 基础模型动画
protected Dictionary<string, AvatarInfo> _avatarInfo = new Dictionary<string, AvatarInfo>(); // 换装信息
private List<int> _avatarLoadQueue = new List<int>();
void Start()
{
}
void Update()
{
}
// 创建模型
public void LoadModel(int modelId)
{
_bodyModelId = modelId;
ResourceMgr.Instance.LoadModel(modelId, (GameObject obj) =>
{
_body = obj;
// 换装请求
if (_avatarLoadQueue.Count > 0) {
foreach (var avatar in _avatarLoadQueue) {
LoadAvatar(avatar);
}
_avatarLoadQu