public void UnloadAsset(AssetInfo asset) { #if !UnitTest if (Logger.IsDebugEnabled) { Logger.DebugFormat("unload asset {0}", asset); } #endif if (_loadedGo.ContainsKey(asset)) { var unityObj = _loadedGo[asset]; _loadedGo.Remove(asset); _assetManager.Recycle(unityObj); } else { if (_loadKeys.ContainsKey(asset)) { var key = _loadKeys[asset]; _assetManager.LoadCancel(key); _loadKeys.Remove(asset); } else { Logger.ErrorFormat("no load key for asset {0}", asset); } } }
public virtual void Recycle(IUnityAssetManager assetManager) { if (UnityObject != null) { assetManager.Recycle(UnityObject); } }
private void ProcessUnloadRequests() { var goCount = _cachedUnloadGoRequest.Count; var sceneCount = _cachedUnloadSceneRequest.Count; for (int i = 0; i < goCount; i++) { var go = _cachedUnloadGoRequest.Dequeue(); if (BeforeGoUnloaded != null) { BeforeGoUnloaded(go); } if (GoUnloaded != null) { GoUnloaded.Invoke(go); } _assetManager.Recycle(go); --NotFinishedRequests; } for (int i = 0; i < sceneCount; i++) { var scene = _cachedUnloadSceneRequest.Dequeue(); SceneManager.UnloadSceneAsync(scene); _logger.InfoFormat("unload scene {0}", scene); } }
public override void OnLoadResources(IUnityAssetManager assetManager) { base.OnLoadResources(assetManager); foreach (var entity in _player.GetEntities()) { if (entity.hasAppearanceInterface) { var loadRequests = entity.appearanceInterface.Appearance.GetLoadRequests(); foreach (var request in loadRequests) { var intercept = _interceptPool.Get(); intercept.SetParam(entity, request.GetHandler <PlayerEntity>()); assetManager.LoadAssetAsync(entity, request.AssetInfo, intercept.Call); } var recycleRequests = entity.appearanceInterface.Appearance.GetRecycleRequests(); foreach (var request in recycleRequests) { entity.RemoveAsset(request); assetManager.Recycle(request); } entity.appearanceInterface.Appearance.ClearRequests(); } } }
public override void OnLoadResources(IUnityAssetManager assetManager) { base.OnLoadResources(assetManager); foreach (var entity in _player.GetEntities()) { if (!entity.hasAppearanceInterface) { continue; } var loadRequests = entity.appearanceInterface.Appearance.GetLoadRequests(); if (loadRequests.Count > 0) { var call = _assetsAsyncCallPool.Get(); call.CreateCallFuncMapping(entity, loadRequests); CreateAssetInfos(loadRequests); assetManager.LoadAssetsAsync(entity, _assetInfos, call.CallFunc); } var recycleRequests = entity.appearanceInterface.Appearance.GetRecycleRequests(); foreach (var request in recycleRequests) { entity.RemoveAsset(request); assetManager.Recycle(request); } entity.appearanceInterface.Appearance.ClearRequests(); } }
public virtual void Recycle(IUnityAssetManager assetManager) { foreach (var asset in LoadedAssets) { if (asset.Value != null) { assetManager.Recycle(asset.Value); } } }
public void AddToGameObjectPool(Object obj) { var unityObj = obj as UnityObject; if (unityObj == null) { unityObj = UnityObject.GetUnityObject(obj as GameObject); } _assetManager.Recycle(unityObj); }
public void Recycle(IUnityAssetManager assetManager) { foreach (var unityObject in _unityObjects.Values) { assetManager.Recycle(unityObject); } _unityObjects.Clear(); _effects.Clear(); _globalEffects.Clear(); }
private static void ProcessOldResources(Queue <RemoveAssetStatus> resOldResource, IUnityAssetManager assetManager) { while (resOldResource.Count > 0) { var removeAssetStatus = resOldResource.Dequeue(); var res = removeAssetStatus.Status; if (res.Status == EAssetLoadStatus.Loaded) { var actions = removeAssetStatus.Actions; actions.Recycle(res); assetManager.Recycle(res.Object); } else if (res.Status == EAssetLoadStatus.UnInit) { assetManager.Recycle(res.Object); } res.ReleaseReference(); } }
public void RemoveLocalEffect(string effectName, IUnityAssetManager assetManager) { UnityObject ret; if (_unityObjects.TryGetValue(effectName, out ret)) { _effects[effectName].Recycle(); _unityObjects.Remove(effectName); _effects.Remove(effectName); assetManager.Recycle(ret); } }
public void OnLoadSucc(string source, UnityObject unityObj) { #if !UnitTest if (Logger.IsDebugEnabled) { Logger.DebugFormat("OnLoadSucc {0}", unityObj.Address); } #endif if (!_loadKeys.ContainsKey(unityObj.Address)) { _assetManager.Recycle(unityObj); return; } _loadKeys.Remove(unityObj.Address); var go = unityObj.AsGameObject; _loadedGo[unityObj.Address] = unityObj; AppearanceUtils.EnableRender(go); if (null != _loadedCb) { _loadedCb(unityObj.Address, go); } }
public void OnGoLoadSucc(int[] para, UnityObject unityObj) { var obj = unityObj.AsGameObject; if (null == obj) { _logger.ErrorFormat("Asset {0}:{1} Load GameObject Fialed ", unityObj.Address.BundleName, unityObj.Address.AssetName); return; } if (para == null || para.Length != 2) { return; } try { EAssetType atype = (EAssetType)para[0]; switch (atype) { case EAssetType.AUDIO: { //Sound int soundId = para[1]; if (!_dictSounds.ContainsKey(soundId)) { AudioSource audio = obj.GetComponent <AudioSource>(); if (null != audio) { _dictSounds.Add(soundId, audio.clip); } } break; } case EAssetType.EFFECT: { //Effect int effectId = para[1]; _effectPool.AddEffectPrefab(effectId, obj); break; } } _assetManager.Recycle(unityObj); } catch (Exception e) { _logger.ErrorFormat(e.Message); } }
public void Recycle(IUnityAssetManager assetManager) { foreach (var go in _goCollection) { assetManager.Recycle(go.Value); } _goCollection.Clear(); if (PlayerRoot != null) { ResLogger.InfoFormat("Destroy PlayerRoot {0}", PlayerRoot.name); // gameoobject through new when player loaded Object.DestroyImmediate(PlayerRoot); ResLogger.InfoFormat("Destroy PlayerRoot End"); } PlayerRoot = null; }
private void OnLoadSucc(AssetRequestSource assetRequestSource, UnityObject u) { var obj = u.AsGameObject; var isSourceExist = false; var comp = GetComponent(assetRequestSource); var entity = GetEntity(assetRequestSource.EntityKey); if (comp != null) { var assetStatus = comp.Resources[assetRequestSource.ResIndex]; if (assetStatus.LastRequestTime == assetRequestSource.TimeLine) { isSourceExist = true; var actions = GetActions(assetRequestSource.ResIndex); if (obj == null) { actions.OnLoadFailed(entity, assetStatus); assetStatus.Status = EAssetLoadStatus.Failed; } else { assetStatus.Object = u; if (actions.CanInit(entity, assetStatus)) { actions.Init(entity, assetStatus); assetStatus.Status = EAssetLoadStatus.Loaded; } else { assetStatus.Status = EAssetLoadStatus.UnInit; } } } } if (!isSourceExist) { _loadRequestManager.Recycle(u); } }
public void OnLoadSucc(string source, UnityObject unityObj) { SingletonManager.Get <SubProgressBlackBoard>().Step(); _loadingCount--; if (unityObj.AsObject == null) { _logger.ErrorFormat("Preload asset {0} failed", unityObj.Address); } else { _assetManager.Recycle(unityObj); } if (_loadingCount <= 0) { _sessionState.FullfillExitCondition(typeof(PreLoadSystem)); } }
private void ProcessUnloadRequests() { var goCount = _cachedUnloadGoRequest.Count; var sceneCount = _cachedUnloadSceneRequest.Count; for (int i = 0; i < goCount; i++) { var go = _cachedUnloadGoRequest.Dequeue(); if (BeforeGoUnloaded != null) { BeforeGoUnloaded(go); } RemoveRequest(LevelRequestEnum.UnloadGo, go.Address.ToString()); if (GoUnloaded != null) { GoUnloaded.Invoke(go); } if (!SharedConfig.DisableRecycleSetramingGo) { _assetManager.Recycle(go); } else { UnityEngine.Object.Destroy(go); } --NotFinishedRequests; } for (int i = 0; i < sceneCount; i++) { var scene = _cachedUnloadSceneRequest.Dequeue(); SceneManager.UnloadSceneAsync(scene); _logger.InfoFormat("unload scene {0}", scene); } }
public void OnLoadSucc(PlayerEntity player, UnityObject unityObj) { if (null == unityObj || null == unityObj.AsGameObject) { Logger.ErrorFormat("CharacterLog-- playerEntity: {0} unityObj is Null", player.entityKey); } GameObject go = unityObj; if (player.hasThirdPersonModel) { _assetManager.Recycle(player.thirdPersonModel.UnityObjectValue); player.RemoveAsset(player.thirdPersonModel.UnityObjectValue); } player.ReplaceThirdPersonModel(go, unityObj); var provider = SingletonManager.Get <HitBoxTransformProviderCache>() .GetProvider(player.thirdPersonModel.Value); HitBoxComponentUtility.InitHitBoxComponent(player.entityKey.Value, player, provider); RemoveRagdollOnServerSide(go, provider.GetHitBoxColliders().Values.ToList()); HandleLoadedModel(player, go); InitCharacterControllerSetting(player); player.AddAsset(unityObj); go.name = go.name.Replace("(Clone)", ""); go.transform.SetParent(GetThirdModelParent(player.RootGo().transform)); go.transform.localPosition = new Vector3(0, 0, 0); go.transform.localRotation = Quaternion.identity; go.transform.localScale = Vector3.one; Logger.InfoFormat("CharacterLog-- P3 loaded: {0}", player.entityKey); BoneTool.CacheTransform(go); player.ReplaceBones(null, null, null); player.bones.Head = BoneMount.FindChildBoneFromCache(go, BoneName.CharacterHeadBoneName); player.bones.Spine = BoneMount.FindChildBoneFromCache(go, BoneName.CharacterSpineName); player.ReplaceThirdPersonAnimator(go.GetComponent <Animator>()); if (player.hasFsmInputRelateInterface) { player.fsmInputRelateInterface.Relate.InitLimit(); player.fsmInputRelateInterface.Relate.CreateAllLimitFsmInput(player.thirdPersonAnimator.UnityAnimator); } var ik = go.AddComponent <PlayerIK>(); ik.SetAnimator(AvatarIKGoal.LeftHand, player.thirdPersonAnimator.UnityAnimator); ik.SetIKLayer(AvatarIKGoal.LeftHand, NetworkAnimatorLayer.ThirdPersonIKPassLayer); ik.SetAnimator(AvatarIKGoal.RightHand, player.thirdPersonAnimator.UnityAnimator); ik.SetIKLayer(AvatarIKGoal.RightHand, NetworkAnimatorLayer.ThirdPersonIKPassLayer); if (player.isFlagSelf) { var animationEvent = go.AddComponent <AnimationClipEvent>(); animationEvent.Player = player; player.animatorClip.ClipManager.SetAnimationCleanEventCallback(animationEvent .InterruptAnimationEventFunc); } else { go.AddComponent <ThirdPersonAnimationClipEvent>(); } // 设置大厅传入的roleId和avatarId player.appearanceInterface.Appearance.SetRoleModelIdAndInitAvatar(player.playerInfo.RoleModelId, player.playerInfo.AvatarIds); player.characterControllerInterface.CharacterController.SetCharacterRoot(player.characterContoller.Value .gameObject); player.appearanceInterface.Appearance.SetRootGo(player.RootGo()); player.appearanceInterface.Appearance.SetThirdPersonCharacter(go); player.appearanceInterface.Appearance.SetRagDollComponent(player.ragDoll); player.characterControllerInterface.CharacterController.SetThirdModel(player.thirdPersonModel.Value); player.characterBoneInterface.CharacterBone.SetCharacterRoot(player.characterContoller.Value .gameObject); player.characterBoneInterface.CharacterBone.SetThirdPersonCharacter(go); ForceCrouch(player.thirdPersonAnimator.UnityAnimator); player.characterBoneInterface.CharacterBone.SetStableCrouchPelvisRotation(); ForceStand(player.thirdPersonAnimator.UnityAnimator); player.characterBoneInterface.CharacterBone.SetStableStandPelvisRotation(); player.appearanceInterface.Appearance.SetAnimatorP3(player.thirdPersonAnimator.UnityAnimator); player.appearanceInterface.Appearance.PlayerReborn(); player.characterControllerInterface.CharacterController.PlayerReborn(); if (player.hasStateInterface) { player.stateInterface.State.PlayerReborn(); } if (player.hasPlayerInfo) { player.playerInfo.InitTransform(); } player.ReplaceNetworkAnimator( NetworkAnimatorUtil.CreateAnimatorLayers(player.thirdPersonAnimator.UnityAnimator), NetworkAnimatorUtil.GetAnimatorParams(player.thirdPersonAnimator.UnityAnimator)); player.networkAnimator.SetEntityName(player.entityKey.ToString()); player.ReplaceOverrideNetworkAnimator(); if (SharedConfig.IsServer) { player.ReplaceNetworkAnimatiorServerTime(0); } // 禁用非可见状态下的动画更新,在获取Stable状态之后 if (SharedConfig.IsServer || !player.isFlagSelf) { player.thirdPersonAnimator.UnityAnimator.cullingMode = AnimatorCullingMode.CullUpdateTransforms; } else { player.thirdPersonAnimator.UnityAnimator.cullingMode = AnimatorCullingMode.AlwaysAnimate; } //人物变身、换肤时,清空特效数据 if (player.hasEffects) { player.effects.ResetEffects(); } // 处理显隐 if (player.hasGamePlay) { PlayerEntityUtility.SetVisibility(go, player.gamePlay.Visibility); } }
public void OnLoadSucc(PlayerEntity player, UnityObject unityObj) { GameObject go = unityObj; HandleLoadedModel(player, go); if (player.hasFirstPersonModel) { _assetManager.Recycle(player.firstPersonModel.UnityObjectValue); player.RemoveAsset(player.firstPersonModel.UnityObjectValue); } player.ReplaceFirstPersonModel(go, unityObj); player.AddAsset(unityObj); player.appearanceInterface.FirstPersonAppearance = new FirstPersonAppearanceManager(player.firstPersonAppearance); go.name = "P1_" + player.entityKey; go.transform.SetParent(player.RootGo().transform); go.transform.localPosition = new Vector3(0, player.firstPersonAppearance.FirstPersonHeight, player.firstPersonAppearance.FirstPersonForwardOffset); go.transform.localRotation = Quaternion.identity; go.transform.localScale = Vector3.one; Logger.InfoFormat("P1 loaded: {0}", player.entityKey); player.ReplaceFirstPersonAnimator(go.GetComponent <Animator>()); var ik = go.AddComponent <PlayerIK>(); ik.SetAnimator(AvatarIKGoal.LeftHand, player.firstPersonAnimator.UnityAnimator); ik.SetIKLayer(AvatarIKGoal.LeftHand, NetworkAnimatorLayer.FirstPersonIKPassLayer); ik.SetAnimator(AvatarIKGoal.RightHand, player.firstPersonAnimator.UnityAnimator); ik.SetIKLayer(AvatarIKGoal.RightHand, NetworkAnimatorLayer.FirstPersonIKPassLayer); BoneTool.CacheTransform(go); if (player.isFlagSelf) { var animationEvent = go.AddComponent <AnimationClipEvent>(); animationEvent.Player = player; player.animatorClip.ClipManager.SetAnimationCleanEventCallback(animationEvent .InterruptAnimationEventFunc); } else { go.AddComponent <ThirdPersonAnimationClipEvent>(); } player.firstPersonAnimator.UnityAnimator.Update(0); player.appearanceInterface.Appearance.SetFirstPersonCharacter(go); player.appearanceInterface.FirstPersonAppearance.SetFirstPersonCharacter(go); player.appearanceInterface.Appearance.SetAnimatorP1(player.firstPersonAnimator.UnityAnimator); player.stateInterface.State.SetName(player.RootGo().name); player.characterBoneInterface.CharacterBone.SetFirstPersonCharacter(go); player.ReplaceFpAnimStatus( NetworkAnimatorUtil.CreateAnimatorLayers(player.firstPersonAnimator.UnityAnimator), NetworkAnimatorUtil.GetAnimatorParams(player.firstPersonAnimator.UnityAnimator)); // 禁用非可见状态下的动画更新 if (!player.isFlagSelf) { player.firstPersonAnimator.UnityAnimator.cullingMode = AnimatorCullingMode.CullUpdateTransforms; } else { player.firstPersonAnimator.UnityAnimator.cullingMode = AnimatorCullingMode.AlwaysAnimate; } }