Beispiel #1
0
 public VFXAsyncResult(VFXConfig.VFXType vfxType, GameObject result, string errorMessge)
 {
     VFXType      = vfxType;
     Result       = result;
     ErrorMessage = errorMessge;
     Success      = Result && string.IsNullOrEmpty(errorMessge);
 }
        public void InstantiateEffectAsync(VFXConfig.VFXType vfxType, Action <VFXAsyncResult> completedAction)
        {
            int vfxTypeIndex = (int)vfxType;

            m_EffectStates[vfxTypeIndex].InstantiateCompletedActions.Enqueue(completedAction);
            Addressables.InstantiateAsync(VFXConfig.ITEM_CONFIGS[(int)vfxType].AssetKey).Completed += m_EffectStates[vfxTypeIndex]._OnInstantiateAsyncCompleted;
        }
Beispiel #3
0
        /// <summary>
        /// 异步创建Effect
        ///	    <see cref="GetEffectCountInPool(VFXConfig.VFXType)"/>大于0的话从池中拿
        ///		异步实例化
        /// </summary>
        public void PopEffectAsync(VFXConfig.VFXType vfxType, Action <VFXEffectInstance> completedAction)
        {
            int vfxTypeIndex = (int)vfxType;

            if (m_EffectStates[vfxTypeIndex].InstantiatePool.Count > 0)
            {
                VFXEffectInstance effectInstance = m_EffectStates[vfxTypeIndex].InstantiatePool.Pop();
                effectInstance.Instance.SetActive(true);
                completedAction?.Invoke(effectInstance);
            }
            else
            {
                m_EffectStates[vfxTypeIndex].PopCompletedActions.Enqueue(completedAction);
                m_AssetHelper.InstantiateEffectAsync(vfxType, OnInstantiateEffectCompleted);
            }
        }
Beispiel #4
0
 /// <summary>
 /// 同步创建Effect
 ///	    <see cref="GetEffectCountInPool(VFXConfig.VFXType)"/>大于0的话从池中拿
 ///		<see cref="IsLoadedEffect(VFXConfig.VFXType)"/>的话,通过Loaded出来的Effect实例化
 /// </summary>
 public VFXEffectInstance PopEffect(VFXConfig.VFXType vfxType)
 {
     if (GetEffectCountInPool(vfxType) > 0)
     {
         VFXEffectInstance effectInstance = m_EffectStates[(int)vfxType].InstantiatePool.Pop();
         effectInstance.Instance.SetActive(true);
         return(effectInstance);
     }
     else if (IsLoadedEffect(vfxType))
     {
         m_EffectStates[(int)vfxType].InstantiateCount++;
         return(new VFXEffectInstance(vfxType, Instantiate(m_AssetHelper.GetEffect(vfxType)), false));
     }
     else
     {
         throw new Exception(string.Format("effect ({0}) not loaded", vfxType));
     }
 }
        public void LoadEffectAsync(VFXConfig.VFXType vfxType, Action <VFXAsyncResult> completedAction)
        {
            int vfxTypeIndex = (int)vfxType;

            if (m_EffectStates[vfxTypeIndex].EffectAsset != null)
            {
                completedAction?.Invoke(new VFXAsyncResult(vfxType, m_EffectStates[vfxTypeIndex].EffectAsset, string.Empty));
            }
            else if (m_EffectStates[vfxTypeIndex].IsLoading)
            {
                m_EffectStates[vfxTypeIndex].CompletedAction += completedAction;
            }
            else
            {
                m_EffectStates[vfxTypeIndex].IsLoading        = true;
                m_EffectStates[vfxTypeIndex].CompletedAction += completedAction;
                Addressables.LoadAssetAsync <GameObject>(VFXConfig.ITEM_CONFIGS[(int)vfxType].AssetKey).Completed += m_EffectStates[vfxTypeIndex]._OnLoadAsyncCompleted;
            }
        }
Beispiel #6
0
 public VFXEffectInstance(VFXConfig.VFXType vfxType, GameObject instance, bool isInstantiatedAsync)
 {
     VFXType             = vfxType;
     Instance            = instance;
     IsInstantiatedAsync = isInstantiatedAsync;
 }
Beispiel #7
0
 /// <summary>
 /// 实例化中的Effect数量
 /// </summary>
 public int GetInstantiatingEffectCount(VFXConfig.VFXType vfxType)
 {
     return(m_EffectStates[(int)vfxType].PopCompletedActions.Count);
 }
Beispiel #8
0
 /// <summary>
 /// Effect在池中的剩余数量
 /// </summary>
 public int GetEffectCountInPool(VFXConfig.VFXType vfxType)
 {
     return(m_EffectStates[(int)vfxType].InstantiatePool.Count);
 }
Beispiel #9
0
 /// <summary>
 /// Effect是否加载
 /// </summary>
 public bool IsLoadedEffect(VFXConfig.VFXType vfxType)
 {
     return(m_AssetHelper.IsLoadedEffect(vfxType));
 }
Beispiel #10
0
 /// <summary>
 /// 异步加载Effect
 /// </summary>
 public void LoadEffectAsync(VFXConfig.VFXType vfxType, Action <VFXAsyncResult> completedAction)
 {
     m_AssetHelper.LoadEffectAsync(vfxType, completedAction);
 }
 public GameObject GetEffect(VFXConfig.VFXType vfxType)
 {
     return(m_EffectStates[(int)vfxType].EffectAsset);
 }
 public bool IsLoadedEffect(VFXConfig.VFXType vfxType)
 {
     return(m_EffectStates[(int)vfxType].EffectAsset != null);
 }