unity3D,整体部位换装方法(包含皮肤)

本文介绍了Unity3D中实现角色整体部位换装的方法,包括头发、头饰、眼镜、套装、衣服、裤子、袜子和鞋子等。通过代码展示了如何加载和替换不同部位的Prefab,以及保存和恢复装备状态。
摘要由CSDN通过智能技术生成

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using CommonDefine;
using LitJson;
using System;

public class PlayerAttribute : MonoBehaviour
{
    public enum AVATAR_TYPE 
    {
        AVATAR_TYPE_NORMAL,         //不带骨骼模型
        AVATAR_TYPE_WITH_BONE       //带骨骼模型
    }

    [SerializeField]
    public AVATAR_TYPE m_emType;

    /// <summary>
    /// 一些基本变量,存放用于换装的Prefab的引用,以及索引下标,bones用来存储Skin合并后的骨骼引用,rootBone用来存储根骨骼
    /// </summary>

    //头发
    public GameObject[] Hairs;
    //头饰
    public GameObject[] Headgear;
    //眼镜
    public GameObject[] Glasess;
    //套装
    public GameObject[] Suit;
    //衣服
    public GameObject[] Clothes;
    //裤子
    public GameObject[] Trousers;
    //袜子
    public GameObject[] Stockings;
    //鞋
    public GameObject[] Shoes;


    public GameObject m_face;

    private int hairIndex = 0;
    private int HeadgearIndex = 0;
    private int clothesIndex = 0;
    private int TrousersIndex = 0;
    private int StockingsIndex = 0;
    private int ShoesIndex = 0;
    public string[] clothdata = new string[6];

    private List<Transform> bones;
    private GameObject rootBone;

    #region json    
    //private JsonData m_data = new JsonData();
    //private JsonData m_faceControlData = new JsonData();
    //private JsonData m_faceData = new JsonData();
    //private JsonData m_clothData = new JsonData();
    //private JsonData m_decorationData = new JsonData();      //装饰数据
    #endregion

    private SkinnedMeshRenderer m_faceSmr;

    //public void setData(JsonData data)
    //{
    //    Debug.Log("PlayerAttribute setData " + data.ToJson());
    //    m_data = data;
    //    m_faceControlData = DataCenter.AsDataByKey(data, CommonDefine.AVATAR_Attribute.FACE_CONTROL_DATA);
    //    // Debug.Log("加载player:" + m_faceControlData.ToJson());
    //    m_faceData = DataCenter.AsDataByKey(data, CommonDefine.AVATAR_Attribute.FACE_DATA);
    //    m_clothData = DataCenter.AsDataByKey(data, CommonDefine.AVATAR_Attribute.CLOTH_DATA);
    //    m_decorationData = DataCenter.AsDataByKey(data, CommonDefine.AVATAR_Attribute.HOME_DECORATION);
    //    if (gameObject.transform.Find("DressSpaceCanva") != null)
    //    {
    //        Debug.Log("加载friend home 界面:" + m_decorationData.ToJson());
    //        GameObject space = gameObject.transform.Find("DressSpaceCanva").gameObject;
    //        if (space.GetComponent<SpaceAttribute>() != null)
    //        {
    //            space.GetComponent<SpaceAttribute>().otherdata = m_decorationData;
    //        }
    //    }
    //}

    void Start()
    {
        Debug.Log("PlayerAttribute start");
        //找到根骨的节点,此处的Bip001是3Dmax中Bip结构的默认根节点。主干部分的蒙皮导出时带有骨骼,所以可以在Prefab的子节点上找到
        rootBone = gameObject.transform.Find("Bip001").gameObject;
        bones = new List<Transform>();
        if (m_face != null) {
            m_faceSmr = m_face.GetComponent<SkinnedMeshRenderer>();
        }

       // changeCloths();
        BuildPlayer();
        
      //  changeFace();
    }

    //void changeCloths()
    //{
    //    clothdata = Attribute.manData;
    //    string strHairId = DataCenter.AsString(m_faceData, CommonDefine.AVATAR_Attribute.AVATAR_HAIR);
    //    strHairId = string.IsNullOrEmpty(strHairId) ? "10017" : strHairId;
    //    string strHeadgearId = DataCenter.AsString(m_faceData, CommonDefine.AVATAR_Attribute.AVATAR_Headgear);
    //    strHeadgearId = string.IsNullOrEmpty(strHeadgearId) ? "14001" : strHeadgearId;
    //    string strClothId = DataCenter.AsString(m_faceData, CommonDefine.AVATAR_Attribute.AVATAR_Cloth);
    //    strClothId = string.IsNullOrEmpty(strClothId) ? "12007" : strClothId;
    //    string strPantsId = DataCenter.AsString(m_faceData, CommonDefine.AVATAR_Attribute.AVATAR_Pants);
    //    strPantsId = string.IsNullOrEmpty(strPantsId) ? "15002" : strPantsId;
    //    string strStockId = DataCenter.AsString(m_faceData, CommonDefine.AVATAR_Attribute.AVATAR_Stock);
    //    strStockId = string.IsNullOrEmpty(strStockId) ? "17001" : strStockId;
    //    string strShoeId = DataCenter.AsString(m_faceData, CommonDefine.AVATAR_Attribute.AVATAR_Shoes);
    //    strShoeId = string.IsNullOrEmpty(strShoeId) ? "16001" : strShoeId;
    //    string strSuitId = DataCenter.AsString(m_faceData, CommonDefine.AVATAR_Attribute.AVATAR_Suit);
    //    strSuitId = string.IsNullOrEmpty(strSuitId) ? "0" : strSuitId;          //TODO:: LUXINYI
    //    List<string> list = new List<string>() { strHairId, strHeadgearId, strClothId, strPantsId, strStockId, strShoeId, strSuitId };
    //    clothdata = list.ToArray();
    //    Debug.Log("获取到配置信息" + m_clothData.ToJson());
    //    ChangeAllClothes
    //        (Attribute.instance.getGoods(clothdata[0], AVATAR_Attribute.AVATAR_HAIR), Attribute.instance.getGoods(clothdata[1], AVATAR_Attribute.AVATAR_Headgear),
    //        Attribute.instance.getGoods(clothdata[2], AVATAR_Attribute.AVATAR_Cloth), Attribute.instance.getGoods(clothdata[3], AVATAR_Attribute.AVATAR_Pants),
    //        Attribute.instance.getGoods(clothdata[4], AVATAR_Attribute.AVATAR_Stock), Attribute.instance.getGoods(clothdata[5], AVATA

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Batman1208

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值