public IEnumerator InitRoutine() { var assetRes = new AssetResource(); yield return(StartCoroutine(SGameEngine.ResourceLoader.Instance.load_asset("Assets/" + xc.ResPath.path3, typeof(TextAsset), assetRes, true, false, string.Empty))); var asset = assetRes.asset_ as TextAsset; if (asset == null) { GameDebug.LogError("InitRoutine load_asset failed."); yield break; } var mgr = LuaScriptMgr.Instance; mgr.ReloadBytes(asset.bytes); assetRes.destroy(); // 等待1帧,防止一帧内GC对象太多 yield return(null); mgr.Start(); }
/// <summary> /// 加载音效资源 /// </summary> /// <returns></returns> IEnumerator LoadAudio(GameObject bind_node, string res_path, bool is_loop) { AssetResource ar = new AssetResource(); yield return(ResourceLoader.Instance.StartCoroutine(ResourceLoader.Instance.load_asset(res_path, typeof(Object), ar))); if (ar.asset_ == null) { GameDebug.LogError(string.Format("the res {0} does not exist", res_path)); yield break; } if (bind_node != null) { ResourceUtilEx.Instance.host_res_to_gameobj(bind_node, ar);// 将asset资源的生命周期与GameObject关联起来 var audio_clip = ar.asset_ as AudioClip; if (audio_clip != null) { PlayAudio(audio_clip, is_loop); } } else { ar.destroy(); } }
/// <summary> /// 播放音效 /// </summary> /// <param name="effectPath"></param> /// <param name="pos"></param> /// <returns></returns> public IEnumerator PlayAudio(string resPath, EmitInfo emitInfo, uint emitId) { var ar = new AssetResource(); yield return(ResourceLoader.Instance.StartCoroutine(ResourceLoader.Instance.load_asset(resPath, typeof(Object), ar))); if (ar.asset_ == null) { GameDebug.LogError(string.Format("the res {0} does not exist", resPath)); yield break; } // 如果当前ID发生变化,说明之前的特效播放已经被终止 if (emitId != mCurEmitId) { ar.destroy(); yield break; } emitInfo.SetAuido(ar); var audio_clip = ar.asset_ as AudioClip; if (audio_clip != null) { AudioManager.Instance.PlayAudio(audio_clip, false); } }
/// <summary> /// 预加载表格的bundle文件 /// </summary> /// <returns></returns> public IEnumerator Preload() { foreach (var info in mSqliteTableInfos) { var bundle_path = info.Value.bundle_path; if (string.IsNullOrEmpty(bundle_path)) { continue; } AssetResource ar = new AssetResource(); string full_bundle_path = "Assets/Res/" + bundle_path; yield return(MainGame.GlobalMono.StartCoroutine(ResourceLoader.Instance.load_asset(full_bundle_path, typeof(UnityEngine.Object), ar))); AssetObject asset_obj = ar.get_obj(); if (asset_obj == null) { GameDebug.LogError(string.Format("Preload table {0} error", bundle_path)); } else { var bundl_list = asset_obj.get_dependence_bundles_; if (bundl_list.Count > 0) { info.Value.bundle = bundl_list[0].get_asset_bundle_; // 表格默认只有一个bundle文件 } // 连接sqlite表格前会重新加载assetbundle的资源 Resources.UnloadAsset(ar.asset_); } //ar.destroy(); } }
/// <summary> /// 加载模型物体 /// </summary> public IEnumerator LoadModel(string res_path) { AssetResource ar = new AssetResource(); yield return(ResourceLoader.Instance.StartCoroutine(ResourceLoader.Instance.load_asset(res_path, typeof(Object), ar))); if (ar.asset_ == null) { GameDebug.LogError(string.Format("the res {0} does not exist", res_path)); yield break; } // while(true) // { // yield return null; // } if (!m_IsDestory) { ResourceUtilEx.Instance.host_res_to_gameobj(m_ModelParent, ar);// 将asset资源的生命周期与GameObject关联起来 GameObject model_object = GameObject.Instantiate(ar.asset_) as GameObject; SetModel(model_object); } else { ar.destroy(); } }
IEnumerator LoadAndPlayVoice(uint id) { var db = DBManager.Instance.GetDB <DBVoice>(); string voicePath = db.GetVoicePath(id); if (voicePath == "") { yield break; } AssetResource ar = new AssetResource(); yield return(ResourceLoader.Instance.StartCoroutine(ResourceLoader.Instance.load_asset(GlobalConst.ResPath + voicePath, typeof(Object), ar))); if (ar.asset_ == null) { GameDebug.LogError(string.Format("the res {0} does not exist", voicePath)); yield break; } GameObject model = GetModelParent(); if (model == null) { ar.destroy(); yield break; } AudioClip audio_clip = ar.asset_ as AudioClip; ResourceUtilEx.Instance.host_res_to_gameobj(model, ar); AudioManager.Instance.PlayBattleSFX(audio_clip, SoundType.NPC); mPlayVoiceEndTime = Time.time + audio_clip.length; }
void OnDestroy() { mIsDestroy = true; if (mAssetRes != null) { mAssetRes.destroy(); mAssetRes = null; } }
protected AssetResource routerResourceDelegate(string url, string uri, string prefix) { string fileName = Path.GetFileNameWithoutExtension(uri); ResourceVO resourceVO = DataSource.GetResourceVO(prefix, fileName); AssetResource resource = null; if (resourceVO != null) { resource = AssetsManager.getResource(resourceVO.itemPath, LoaderXDataType.EDITORRESOURCE); } return(resource); }
protected virtual void AddDB(IConfigVODB value, bool isForceRemote) { string uri = value.GetFileName(); if (string.IsNullOrEmpty(uri) == false) { string url = PathDefine.configPath + uri + "." + extention; AssetResource resource = queueLoader.add(url, LoaderXDataType.BYTES, itemComplete); resource.userData = value; resource.isForceRemote = isForceRemote; } dbs.Add(value); }
IEnumerator LoadAudioClip(string sound_path, UIPlaySound play_sound) { AssetResource asset_res = new AssetResource(); yield return(ResourceLoader.Instance.load_asset(sound_path, typeof(AudioClip), asset_res)); var audio_clip = asset_res.asset_ as AudioClip; if (play_sound != null && audio_clip != null) { play_sound.audioClip = audio_clip; play_sound.ForceClick();// 需要主动调用一次 } }
/// <summary> /// 销毁特效的bundle资源 /// </summary> public void Destroy() { mIsDestroy = true; mEffectPrefab = null; if (mAssetRes != null) { mAssetRes.destroy(); mAssetRes = null; } mInitCallback.Clear(); }
public void TestDeleteResponse() { var twilioRestClient = Substitute.For <ITwilioRestClient>(); twilioRestClient.AccountSid.Returns("ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"); twilioRestClient.Request(Arg.Any <Request>()) .Returns(new Response( System.Net.HttpStatusCode.NoContent, "null" )); var response = AssetResource.Delete("ZSXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "ZHXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", client: twilioRestClient); Assert.NotNull(response); }
public void TestReadEmptyResponse() { var twilioRestClient = Substitute.For <ITwilioRestClient>(); twilioRestClient.AccountSid.Returns("ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"); twilioRestClient.Request(Arg.Any <Request>()) .Returns(new Response( System.Net.HttpStatusCode.OK, "{\"assets\": [],\"meta\": {\"first_page_url\": \"https://serverless.twilio.com/v1/Services/ZS00000000000000000000000000000000/Assets?PageSize=50&Page=0\",\"key\": \"assets\",\"next_page_url\": null,\"page\": 0,\"page_size\": 50,\"previous_page_url\": null,\"url\": \"https://serverless.twilio.com/v1/Services/ZS00000000000000000000000000000000/Assets?PageSize=50&Page=0\"}}" )); var response = AssetResource.Read("ZSXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", client: twilioRestClient); Assert.NotNull(response); }
public bool ProcessRequestAsync(IRequest request, ISchemeHandlerResponse response, OnRequestCompletedHandler requestCompletedCallback) { if (AssetProvider.IsLocal(request.Url)) { AssetResource asset = AssetProvider.Get(request.Url); response.MimeType = asset.MimeType; response.ResponseStream = asset.Resource; requestCompletedCallback.Invoke(); return(true); } return(false); }
public void TestFetchResponse() { var twilioRestClient = Substitute.For <ITwilioRestClient>(); twilioRestClient.AccountSid.Returns("ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"); twilioRestClient.Request(Arg.Any <Request>()) .Returns(new Response( System.Net.HttpStatusCode.OK, "{\"sid\": \"ZH00000000000000000000000000000000\",\"account_sid\": \"ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",\"service_sid\": \"ZS00000000000000000000000000000000\",\"friendly_name\": \"test-asset\",\"date_created\": \"2018-11-10T20:00:00Z\",\"date_updated\": \"2018-11-10T20:00:00Z\",\"url\": \"https://serverless.twilio.com/v1/Services/ZS00000000000000000000000000000000/Assets/ZH00000000000000000000000000000000\",\"links\": {\"asset_versions\": \"https://serverless.twilio.com/v1/Services/ZS00000000000000000000000000000000/Assets/ZH00000000000000000000000000000000/Versions\"}}" )); var response = AssetResource.Fetch("ZSXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "ZHXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", client: twilioRestClient); Assert.NotNull(response); }
/// <summary> /// 取消之前的loading/销毁资源 /// </summary> /// <param name="loadingId"></param> void RemoveLoadingId(uint loadingId) { if (loadingId != 0) { AssetResource loadRes = null; if (mLoadedAssetRes.TryGetValue(loadingId, out loadRes)) { if (loadRes != null) { loadRes.destroy(); loadRes = null; } mLoadedAssetRes.Remove(loadingId); } } }
/// <summary> /// 停止特效播放 /// </summary> public void Stop() { mLifeTime = 0; mIsFinish = true; if (mEffectObject != null) { ObjCachePoolMgr.Instance.RecyclePrefab(mEffectObject, ObjCachePoolType.SFX, mEffectPath); mEffectObject = null; } if (mAudioRes != null) { mAudioRes.destroy(); mAudioRes = null; } }
public async Task <IActionResult> UpdateAsync(int id, [FromBody] AssetResource resource) { if (!ModelState.IsValid) { return(BadRequest(ModelState.GetErrorMessages())); } var asset = _mapper.Map <Asset>(resource); var result = await _assetService.UpdateAsync(id, asset); if (!result.Success) { return(BadRequest(result.Message)); } var assetResource = _mapper.Map <AssetResource>(result.Asset); return(Ok(assetResource)); }
public void TestFetchRequest() { var twilioRestClient = Substitute.For <ITwilioRestClient>(); var request = new Request( HttpMethod.Get, Twilio.Rest.Domain.Serverless, "/v1/Services/ZSXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/Assets/ZHXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "" ); twilioRestClient.Request(request).Throws(new ApiException("Server Error, no content")); try { AssetResource.Fetch("ZSXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "ZHXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", client: twilioRestClient); Assert.Fail("Expected TwilioException to be thrown for 500"); } catch (ApiException) {} twilioRestClient.Received().Request(request); }
IEnumerator InitEmitter(string assetPath, int maxCount) { if (string.IsNullOrEmpty(assetPath)) { GameDebug.LogError("特效Prefab名字为空"); yield break; } string ext = ""; if (string.IsNullOrEmpty(Path.GetExtension(assetPath))) { ext = ".prefab"; } mAssetPath = assetPath; mInstMaxCount = maxCount; mInitCallback.Clear(); var assetRes = new AssetResource(); string fullPath = string.Format("Assets/Res/{0}{1}", mAssetPath, ext); yield return(MainGame.HeartBehavior.StartCoroutine(SGameEngine.ResourceLoader.Instance.load_asset(fullPath, typeof(Object), assetRes))); // 检查资源是否加载成功 if (assetRes.asset_ == null) { GameDebug.LogError("Init emitter error, can not load prefab " + mAssetPath); yield break; } // 检查组件是否销毁 if (mIsDestroy) { assetRes.destroy(); yield break; } mAssetRes = assetRes; OnObjectLoaded(mAssetRes.asset_); }
public void TestUpdateRequest() { var twilioRestClient = Substitute.For <ITwilioRestClient>(); var request = new Request( HttpMethod.Post, Twilio.Rest.Domain.Serverless, "/v1/Services/ZSXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/Assets/ZHXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "" ); request.AddPostParam("FriendlyName", Serialize("friendlyName")); twilioRestClient.Request(request).Throws(new ApiException("Server Error, no content")); try { AssetResource.Update("ZSXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "ZHXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "friendlyName", client: twilioRestClient); Assert.Fail("Expected TwilioException to be thrown for 500"); } catch (ApiException) {} twilioRestClient.Received().Request(request); }
/// <summary> /// 加载音效资源 /// </summary> /// autoDestroy 加载完自动设置保底过期时间 5分钟 /// <returns></returns> public IEnumerator LoadSFXAudio(string res_path, SoundType type, uint id, UnityAction <AudioClip> callback = null, bool autoDestroy = true) { AssetResource ar = new AssetResource(); yield return(ResourceLoader.Instance.StartCoroutine(ResourceLoader.Instance.load_asset(res_path, typeof(Object), ar))); if (ar.asset_ == null) { GameDebug.LogError(string.Format("the res {0} does not exist", res_path)); yield break; } AudioClip audio_clip = ar.asset_ as AudioClip; if (audio_clip == null) { GameDebug.LogError(string.Format("the res {0} is not audio clip", res_path)); ar.destroy(); yield break; } if (mLoadedAudioAsset.ContainsKey(id)) { ar.destroy(); yield break; } mLoadedAudioAsset.Add(id, ar); if (autoDestroy) { DestroySFX(id, AUDIO_ASSET_MAX_LIFE_TIME); } if (callback != null) { callback(audio_clip); yield break; } PlayBattleSFX(audio_clip, type, id); }
/// <summary> /// 根据参数来加载模型 /// </summary> /// <returns></returns> IEnumerator LoadModel() { if (mAssetRes != null) { mAssetRes.destroy(); } mAssetRes = new AssetResource(); yield return(ResourceLoader.Instance.load_asset(ResPath, typeof(GameObject), mAssetRes)); if (mIsDestroy) { yield break; } if (mAssetRes.asset_ == null) { yield break; } var game_object = GameObject.Instantiate(mAssetRes.asset_) as GameObject; var trans = game_object.transform; trans.SetParent(mCacheTrans, false); trans.localPosition = LocalPos; trans.localScale = LocalScale; trans.localEulerAngles = LocalEuler; // 动作 Animator ani = game_object.GetComponent <Animator>(); if (null != ani && !string.IsNullOrEmpty(ModelAction)) { ani.Play(ModelAction); } xc.ui.ugui.UIHelper.SetLayer(trans, LayerMask.NameToLayer("UI")); }
protected virtual void itemComplete(EventX e) { AssetResource resource = e.target as AssetResource; if (e.type != EventX.COMPLETE) { this.simpleDispatch(EventX.ERROR, "有加载文件失败:" + e.data); return; } IConfigVODB danager = resource.userData as IConfigVODB; if (danager != null) { byte[] buffer = e.data as byte[]; MemoryStream _memoryStream = new MemoryStream(); _memoryStream.Write(buffer, 0, buffer.Length); _memoryStream.Position = 0; addParseItem(danager, _memoryStream); } }
/// <summary> /// 加载资源的协程 /// </summary> /// <param name="image"></param> /// <param name="assetPath"></param> /// <param name="loadingId"></param> /// <returns></returns> IEnumerator LoadTexture(RawImage image, string assetPath, uint loadingId) { var assetRes = new AssetResource(); yield return(MainGame.HeartBehavior.StartCoroutine(ResourceLoader.Instance.load_asset(assetPath, typeof(UnityEngine.Object), assetRes))); // 检查加载的资源是否正常 var assetObject = assetRes.asset_; if (assetObject == null) { mLoadedAssetRes.Remove(loadingId); yield break; } // 检查组件和image等是否已经销毁 Texture buffTex = assetObject as Texture; if (image == null || buffTex == null) { mLoadedAssetRes.Remove(loadingId); assetRes.destroy(); yield break; } // 检查待加载字典中是否存在loadingid if (mLoadedAssetRes.ContainsKey(loadingId)) { mLoadedAssetRes[loadingId] = assetRes; image.texture = buffTex; image.color = Color.white; } else { assetRes.destroy(); } }
public static IEnumerator EnterGame() { // 预加载资源 ControlServerLogHelper.Instance.PostPlayerFollowRecord(PlayerFollowRecordSceneId.PreloadResStart, "", false); #if UNITY_EDITOR MikuLuaProfiler.HookLuaSetup.OnStartGame(); #endif // 创建Core物体 mCoreObject = new GameObject("Core"); GameObject.DontDestroyOnLoad(mCoreObject); // 实例化Game Game mGame = Game.GetInstance(); mHeartBehavior = mCoreObject.AddComponent <Heart>(); AssemblyBridge.Instance.TimelinePlayableEmployee = new TimelinePlayableEmployee(); ClientEventMgr.GetInstance(); // 增加各种Component var resource_loader = mCoreObject.AddComponent <ResourceLoader>(); resource_loader.BundleVersion = NewInitSceneLoader.Instance.BundleVersion; resource_loader.ServerBundleInfo = NewInitSceneLoader.Instance.g_server_bundle_info; mCoreObject.AddComponent <ResourceUtilEx> (); ResourceLoader.Instance.init(); mCoreObject.AddComponent <ObjCachePoolMgr>(); // 因为部分表格资源放在bundle资源中,因此要尽早进行加载 yield return(GlobalMono.StartCoroutine(DBTableManager.Instance.Preload())); mCoreObject.AddComponent <ActorManager>(); HttpRequest.Instance = mCoreObject.AddComponent <HttpRequest>(); mCoreObject.AddComponent <QuadTreeSceneManager>(); mCoreObject.AddComponent <PushManager>(); xc.RedPointDataMgr.GetInstance(); //小红点实例化 xc.LockIconDataMgr.GetInstance(); xc.NewMarkerDataMgr.GetInstance(); //New标记 #if !DISABLE_LUA //mCoreObject.AddComponent<LuaClient>().Init(); LuaClient luaClient = mCoreObject.AddComponent <LuaClient>(); yield return(GlobalMono.StartCoroutine(luaClient.InitRoutine())); #endif #if (TEST_HOST && !PERFORMANCE_TEST) || HD_RESOURCE //mCoreObject.AddComponent<DebugFPS>();// 因为gc的问题暂时屏蔽 mDebugUI = mCoreObject.AddComponent <DebugUI>(); mDebugUI.UnsubscribeAllProcessCmd(); mDebugUI.SubscribeProcessCmd(DebugCommand.OnProcessCmd); //测试环境打开DebugWindow,取消仅在编辑器打开的判断 //#if UNITY_EDITOR var window = GameObject.Instantiate(Resources.Load <GameObject>("Debug/DebugWindow")); GameObject.DontDestroyOnLoad(window); debugWindow = window.AddComponent <DebugWindow>(); //#endif #endif CullManager.Instance.Factor = 1.0f; QualitySetting.DeviceAdaptation(); AssetResource ar = new AssetResource(); // 加载混音设置 yield return(GetGlobalMono().StartCoroutine(ResourceLoader.Instance.load_asset("Assets/Res/Sound/AudioMixer.mixer", typeof(UnityEngine.Object), ar))); AudioManager.Instance.InitMixer(ar.asset_ as AudioMixer); AudioSource audio = mCoreObject.AddComponent <AudioSource>(); audio.playOnAwake = true; audio.loop = true; audio.outputAudioMixerGroup = AudioManager.Instance.GetAudioMixerGroup("Music"); BackGroundAudio backAudio = mCoreObject.AddComponent <BackGroundAudio>(); backAudio.Init(); if (Const.Language != LanguageType.SIMPLE_CHINESE) { string localizeData = LocalizeManager.Instance.GetLocalizationDataPath(Const.Language); yield return(GetGlobalMono().StartCoroutine(GameLocalizeHelper.CoLoadLocalizeFile(localizeData))); } // 加载Font ar = new AssetResource(); yield return(GetGlobalMono().StartCoroutine(ResourceLoader.Instance.load_asset("Assets/Res/UI/Textures/Emoji/Output/emoji.txt", typeof(UnityEngine.Object), ar))); mEmojiTxt = ar.asset_; if (mEmojiTxt == null) { Debug.LogError("emmoji.txt load failed."); } ar = new AssetResource(); yield return(GetGlobalMono().StartCoroutine(ResourceLoader.Instance.load_asset(EmojiText.GetEmojiTextName(EmojiText.EmojiMaterialType.EquipTips), typeof(UnityEngine.Object), ar))); mEmojiTxt_equipTips = ar.asset_; if (mEmojiTxt_equipTips == null) { Debug.LogError("emoji_equipTips.txt load failed."); } // 加载UIMain,程序中只加载一次 PrefabResource pr = new PrefabResource(); yield return(GetGlobalMono().StartCoroutine(ResourceLoader.Instance.load_prefab("Assets/Res/UI/Widget/Preset/UIRoot.prefab", pr, false))); pr.obj_.transform.position = new Vector3(0, 1000.0f, 0); GameObject.DontDestroyOnLoad(pr.obj_); mGame.Init(); // 加载Start场景 if (Game.Instance.IsSkillEditorScene) { var scene_asset_path = string.Format("Assets/Res/Map/scenes/{0}.unity", GlobalConst.DefaultTestScene); yield return(GetGlobalMono().StartCoroutine(ResourceLoader.Instance.load_scene(scene_asset_path, GlobalConst.DefaultTestScene, null))); } // destroy initscenloader GameObject.DestroyImmediate(NewInitSceneLoader.Instance.gameObject, true); // 初始化Game的状态机 mGame.InitFSM(); mGame.mIsInited = true; Application.targetFrameRate = Const.G_FPS; var fps_respond = mCoreObject.AddComponent <FPSRespond>(); fps_respond.FPSUpdateWaitTime = 15.0f; var fps_notice = mCoreObject.AddComponent <FPSNotice>(); // 预加载资源 ControlServerLogHelper.Instance.PostPlayerFollowRecord(PlayerFollowRecordSceneId.PreloadResEnd); ControlServerLogHelper.Instance.PostCloudLadderEventAction(CloudLadderMarkEnum.load_res); // 向后台请求渠道信息列表和服务器列表 #if !UNITY_IPHONE ControlServerLogHelper.Instance.GetChannelList(); #endif ControlServerLogHelper.Instance.GetServerList(); }
/// <summary> /// 设置音效资源 /// </summary> /// <param name="ar"></param> public void SetAuido(AssetResource ar) { mAudioRes = ar; }
public void Update() { if (TargetActor == null) { TargetActor = Game.Instance.GetLocalPlayer(); } if (TargetActor != null) { var allBuffs = TargetActor.BuffCtrl.AllBuffs; // 获取主角身上所有的buff数据 bool buff_list_change = false; // buff的列表是否发生了变化 var idList = SGameEngine.Pool <uint> .List.New(allBuffs.Count); using (var enumerator = allBuffs.GetEnumerator()) { while (enumerator.MoveNext()) { var cur = enumerator.Current; var buffId = cur.Key; idList.Add(buffId); } } idList.Sort(); int i = 0; foreach (var buffId in idList) { if (i >= mBuffMaxCount) { continue; } // 获取buff对象的icon var buff = allBuffs[buffId]; if (string.IsNullOrEmpty(buff.OwnBuffInfo.icon)) { continue; } // 当上次缓存的id与本次不同时,重设buff图标 if (i >= mBuffIds.Count || mBuffIds[i] != buffId) { // 取消之前的loading/销毁资源 var loadingId = mBuffWidgets[i].LoadingId; if (loadingId != 0) { AssetResource loadRes = null; if (mLoadedAssetRes.TryGetValue(loadingId, out loadRes)) { if (loadRes != null) { loadRes.destroy(); loadRes = null; } mLoadedAssetRes.Remove(loadingId); } } // 获取新的loadingid if (mLoadingId == 0) { mLoadingId++; } mBuffWidgets[i].LoadingId = mLoadingId; string iconPath = string.Format("{0}/{1}.png", GlobalConst.BuffIconFolder, buff.OwnBuffInfo.icon); var assetRes = new AssetResource(); mLoadedAssetRes[mLoadingId] = null; MainGame.HeartBehavior.StartCoroutine(LoadBuffIcon(mBuffWidgets[i].BuffImage, assetRes, iconPath, mLoadingId)); mLoadingId++; buff_list_change = true; } CommonTool.SetActive(mBuffWidgets[i].WidgetObject, true); i++; } SGameEngine.Pool <uint> .List.Free(idList); // 数量不同的时候即表示buff列表发生了变化 if (i != mBuffIds.Count) { buff_list_change = true; } // 隐藏没有buff数据的ui for (; i < mBuffMaxCount; ++i) { CommonTool.SetActive(mBuffWidgets[i].WidgetObject, false); // 取消之前的loading/销毁资源 RemoveLoadingId(mBuffWidgets[i].LoadingId); mBuffWidgets[i].LoadingId = 0; } // 获取最新的buffid列表 mBuffIds.Clear(); using (var enumerator = allBuffs.GetEnumerator()) { while (enumerator.MoveNext()) { var cur = enumerator.Current; var buff = cur.Value; if (!string.IsNullOrEmpty(buff.OwnBuffInfo.icon))// 只取出没有叠加的进行显示 { mBuffIds.Add(cur.Key); } } } mBuffIds.Sort(); if (buff_list_change) { // 因为ui动画的问题,需要重新设置layout LayoutRebuilder.ForceRebuildLayoutImmediate(mRectTrans); ClientEventMgr.Instance.FireEvent((int)ClientEvent.CE_BUFF_LIST_CHANGE, new CEventBaseArgs(TargetActor)); } } else { // 隐藏没有buff数据的ui for (int i = 0; i < mBuffMaxCount; ++i) { CommonTool.SetActive(mBuffWidgets[i].WidgetObject, false); RemoveLoadingId(mBuffWidgets[i].LoadingId); mBuffWidgets[i].LoadingId = 0; } // 清除缓存数据 mBuffIds.Clear(); } }
private static IEnumerator ChangePart(GameObject model, uint partId, bool isLocalPlayer = true) { if (model == null) { yield break; } DBAvatarPart.Data data = DBManager.Instance.GetDB <DBAvatarPart>().mData[partId]; string part_name = data.part == DBAvatarPart.BODY_PART.BODY ? xc.AvatarCtrl.BODY_NAME : xc.AvatarCtrl.WEAPON_NAME; // 查找旧资源中的换装节点 Transform old_part = CommonTool.FindChildInHierarchy(model.transform, part_name); if (old_part == null) { Debug.LogError(string.Format("the model {0} does not have a part named {1}", model.name, part_name)); yield break; } string path = data.SuitablePath(isLocalPlayer); // 加载换装部件的模型 AssetResource ar = new AssetResource(); yield return(ResourceLoader.Instance.StartCoroutine(ResourceLoader.Instance.load_asset(string.Format("{0}/{1}.prefab", xc.AvatarCtrl.AVATAR_PATH_PREFIX, path), typeof(GameObject), ar))); GameObject gameObjectAsset = ar.asset_ as GameObject; if (gameObjectAsset == null) { Debug.LogError(string.Format("the res {0} does not exist", path)); yield break; } if (model == null) { ar.destroy(); yield break; } old_part = CommonTool.FindChildInHierarchy(model.transform, part_name); if (old_part == null) { Debug.LogError(string.Format("the model {0} does not have a part named {1}", model.name, part_name)); ar.destroy(); yield break; } // 将asset资源的生命周期与角色GameObject关联起来 ResourceUtilEx.Instance.host_res_to_gameobj(model, ar); // 查找新资源的换装节点 Transform new_part = CommonTool.FindChildInHierarchy(gameObjectAsset.transform, part_name); if (new_part == null) { Debug.LogError(string.Format("the model {0} does not have a part named {1}", gameObjectAsset.name, part_name)); yield break; } SkinnedMeshRenderer new_mesh_renderer = new_part.GetComponent <SkinnedMeshRenderer>(); SkinnedMeshRenderer old_mesh_renderer = old_part.GetComponent <SkinnedMeshRenderer>(); Transform[] old_bones = (Transform[])old_part.GetComponent <SkinnedMeshRenderer>().bones.Clone(); ReplaceSkinnedMesh(old_bones, model, old_mesh_renderer, new_mesh_renderer); }
//-------------------------------------------------------- // 内部调用 //-------------------------------------------------------- IEnumerator WaitActorLoad() { while (CreateActorScene.Instance == null || CreateActorScene.Instance.LoadFinish == false || CreateActorScene.Instance.TimelinesIsLoadFinished == false) { yield return(null); } var isAuditAndIos = AuditManager.Instance.AuditAndIOS(); if (!isAuditAndIos || (isAuditAndIos && !SDKHelper.GetSwitchModel())) { var preload_infos = DBPreloadInfo.Instance.PreloadInfos; if (preload_infos.Count > 0) { mPreloadAssetResource.Clear(); foreach (var info in preload_infos) { var object_asset = new AssetResource(); mPreloadAssetResource.Add(object_asset); MainGame.HeartBehavior.StartCoroutine(SGameEngine.ResourceLoader.Instance.load_asset("Assets/" + info.asset_path, typeof(UnityEngine.Object), object_asset)); } float star_wait_time = Time.unscaledTime; // 等待所有资源加载完毕 while (true) { // 最多等待20s if (Time.unscaledTime - star_wait_time > 20.0f) { Debug.LogError("WaitActorLoad: wait preload asset for long time"); break; } bool all_loaded = true; foreach (var info in mPreloadAssetResource) { if (info.asset_ == null) { all_loaded = false; break; } } if (all_loaded) { break; } else { yield return(null); } } } } if (AuditManager.Instance.AuditAndIOS() && SDKHelper.GetSwitchModel()) { GameObjectControl control = Game.Instance.GameObjectControl; if (control != null) { if (control.scene != null && control.uiPanel != null) { control.scene.SetActive(!AuditManager.Instance.Open); control.uiPanel.SetActive(AuditManager.Instance.Open); } } } //int[] actorList = new int[] { 2, 1, 3 }; if (AuditManager.Instance.AuditAndIOS()) { List <uint> actorList = SDKHelper.GetRoleList(); if (actorList != null && actorList.Count >= 1) { mDefaultSelectIndex = (int)actorList[0]; } } OnClickActorBtn((uint)mDefaultSelectIndex); // 等待一帧才隐藏loading界面,避免播放剧情前穿帮 mHideLoadingBKCoroutine = MainGame.HeartBehavior.StartCoroutine(EndFrameHideLoadingBK()); }