Пример #1
0
 /// <summary>
 /// 创建模型,根据模型的皮肤
 /// </summary>
 /// <param name="unBeastTypeId">神兽模型id</param>
 /// <param name="nSuitId">皮肤id</param>
 /// <param name="callBack">回调</param>
 public void Dowork(int unBeastTypeId, int nSuitId, Action <GameObject> callBack)
 {
     if (this.m_unBeastTypeId == unBeastTypeId && this.m_nSuitId == nSuitId)
     {
         if (null != callBack)
         {
             if (this.m_bFinished)
             {
                 callBack(this.m_gameObject);
             }
             else
             {
                 this.m_callBackFinish = (Action <GameObject>)Delegate.Combine(this.m_callBackFinish, callBack);
             }
         }
     }
     else
     {
         //在创建模型前先卸载之前的缓存模型
         this.Unload();
         this.m_unBeastTypeId  = unBeastTypeId;
         this.m_nSuitId        = nSuitId;
         this.m_callBackFinish = callBack;
         //DataSuit dataByID = DataSuitManager.Instance.GetDataByID(nSuitId);
         DataSuit dataByID = GameData <DataSuit> .dataMap[nSuitId];
         if (null != dataByID)
         {
             //合并类型
             this.m_nMergeType = dataByID.Merge;
             List <string> arrayList = DataExtensions.GetArrayList(dataByID.Texture);
             if (arrayList.Count != 0)
             {
                 //加载模型皮肤需要的贴图
                 for (int i = 0; i < arrayList.Count; i++)
                 {
                     string relativeUrl = string.Format("Texture/SuitTexture/{0}", arrayList[i]);
                     this.m_listAssetRequestSuitTexture.Add(ResourceManager.singleton.LoadTexture(relativeUrl, new AssetRequestFinishedEventHandler(this.OnLoadSuitTextureFinished), AssetPRI.DownloadPRI_Plain));
                 }
             }
             //加载皮肤模型
             if (!string.IsNullOrEmpty(dataByID.SuitPath))
             {
                 string relativeUrl2 = string.Format("Data/Model/BeastModel/{0}", dataByID.SuitPath);
                 this.m_assetRequestSuitModel = ResourceManager.singleton.LoadModel(relativeUrl2, new AssetRequestFinishedEventHandler(this.OnLoadSuitModelFinished), AssetPRI.DownloadPRI_Plain);
             }
         }
         //获取基础模型路径
         this.m_strBaseModelPath = AvatarTool.GetBasePath(nSuitId, unBeastTypeId);
         //加载基础模型
         this.m_assetRequestBaseModel = ResourceManager.singleton.LoadModel(this.m_strBaseModelPath, new AssetRequestFinishedEventHandler(this.OnLoadBaseModelFinished), AssetPRI.DownloadPRI_Plain);
     }
 }
Пример #2
0
        private void avatarToolToolStripMenuItem_Click(object sender, EventArgs e)
        {
            var avatarTool = new AvatarTool();

            avatarTool.Show();
        }
Пример #3
0
 /// <summary>
 /// 创建模型(合并操作等)
 /// </summary>
 private void DetectMerge()
 {
     if (this.m_assetRequestBaseModel != null)
     {
         if (this.m_assetRequestBaseModel == null || this.m_assetRequestBaseModel.IsFinished)
         {
             if (this.m_assetRequestSuitModel == null || this.m_assetRequestSuitModel.IsFinished)
             {
                 for (int i = 0; i < this.m_listAssetRequestSuitTexture.Count; i++)
                 {
                     if (this.m_listAssetRequestSuitTexture[i] != null && !this.m_listAssetRequestSuitTexture[i].IsFinished)
                     {
                         return;
                     }
                 }
                 if (this.m_assetRequestBaseModel.AssetResource.MainAsset == null)
                 {
                     this.m_log.Error(string.Format("m_assetRequestBaseModel.AssetResource.MainAsset == null: m_strBaseModelPath={0}, m_unHeroTypeId={1}, m_nSuitId={2}", this.m_strBaseModelPath, this.m_unBeastTypeId, this.m_nSuitId));
                 }
                 else
                 {
                     try
                     {
                         GameObject gameObject = null;
                         if (this.m_assetRequestBaseModel != null && null != this.m_assetRequestBaseModel.AssetResource)
                         {
                             //实例化基础模型
                             gameObject = (UnityEngine.Object.Instantiate(this.m_assetRequestBaseModel.AssetResource.MainAsset) as GameObject);
                             List <Texture> list = new List <Texture>();
                             for (int i = 0; i < this.m_listAssetRequestSuitTexture.Count; i++)
                             {
                                 list.Add(this.m_listAssetRequestSuitTexture[i].AssetResource.MainAsset as Texture);
                             }
                             //将皮肤贴图上到模型上
                             AvatarTool.ChangeTex(gameObject, list);
                         }
                         GameObject goSuit = null;
                         if (this.m_assetRequestSuitModel != null && null != this.m_assetRequestSuitModel.AssetResource)
                         {
                             //实例化皮肤模型
                             goSuit = (UnityEngine.Object.Instantiate(this.m_assetRequestSuitModel.AssetResource.MainAsset) as GameObject);
                         }
                         this.m_gameObject = AvatarTool.MakeSureRoot(gameObject, goSuit, this.m_nMergeType);
                         if (null == this.m_gameObject)
                         {
                             this.m_log.Error(string.Format("null == m_gameObject: heroTypeId={0}, suitId={1}", this.m_unBeastTypeId, this.m_nSuitId));
                         }
                         //合并模型
                         AvatarTool.CombineModel(this.m_gameObject.transform);
                         //清除缓存
                         for (int i = 0; i < this.m_listAssetRequestSuitTexture.Count; i++)
                         {
                             IAssetRequest assetRequest = this.m_listAssetRequestSuitTexture[i];
                             if (null != assetRequest)
                             {
                                 assetRequest.RemoveQuickly = true;
                                 assetRequest.Dispose();
                             }
                         }
                         this.m_listAssetRequestSuitTexture.Clear();
                     }
                     catch (Exception ex)
                     {
                         this.m_log.Debug(string.Format("AvatarTool:m_strBaseModelPath={0}, m_unHeroTypeId={1}, m_nSuitId={2}", this.m_strBaseModelPath, this.m_unBeastTypeId, this.m_nSuitId));
                         this.m_log.Fatal(ex.ToString());
                     }
                     this.m_bFinished = true;
                     //执行创建模型完成后回调
                     if (null != this.m_callBackFinish)
                     {
                         this.m_callBackFinish(this.m_gameObject);
                         this.m_callBackFinish = null;
                     }
                 }
             }
         }
     }
 }