/// <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); } }
private void avatarToolToolStripMenuItem_Click(object sender, EventArgs e) { var avatarTool = new AvatarTool(); avatarTool.Show(); }
/// <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; } } } } } }