Пример #1
0
        //private void OnEffectLoadComplete(string effectPath, UnityObject unityObject, SystemObject userData)
        //{
        //	effectAssetHandle = null;

        //	GameObject effectGO = (GameObject)unityObject;
        //	string poolGroup = userData as string;

        //	// 读取完的时候, 特效已经销毁了
        //	if (m_Status == EffectStatus.Recycled)
        //	{
        //		RecycleFX();
        //		return;
        //	}
        //	// 读取资源错误
        //	if (unityObject == null)
        //	{
        //		DebugLogger.LogError($"EffectController::OnEffectLoadComplete. 读取资源失败: {effectPath}");
        //		RecycleFX();
        //		return;
        //	}
        //	// 指定了池子组的名字, 但是找不到池子组
        //	if (!string.IsNullOrEmpty(poolGroup) && !PoolManager.GetInstance().HasSpawnPool(poolGroup))
        //	{
        //		DebugLogger.LogError($"EffectController::OnEffectLoadComplete. 找不到SpawnPool. SpawnPoolName: {poolGroup}. effectPath: {effectPath}");
        //		RecycleFX();
        //		return;
        //	}

        //	// 没挂脚本, 就不自动挂了, 省的老是忽略这个错误
        //	VFXController vfx = effectGO.GetComponent<VFXController>();
        //	if (vfx == null)
        //	{
        //		DebugLogger.LogError($"EffectController::OnEffectLoadComplete. 特效没有正确地挂脚本: {effectPath}");
        //		RecycleFX();
        //		return;
        //	}

        //	if (string.IsNullOrEmpty(poolGroup))
        //	{
        //		_SetEffectAndUpdateEffectStatus(vfx);
        //	}
        //	else
        //	{
        //		SpawnPool spawnPool = PoolManager.GetInstance().GetSpawnPool(poolGroup);
        //		GameObjectPool objPool = spawnPool.GetGameObjectPool(effectPath);
        //		if (objPool == null)
        //		{
        //			GameObject template = Instantiate(effectGO);
        //			objPool = spawnPool.CreateGameObjectPool(effectPath, template);
        //		}

        //		_SetEffectAndUpdateEffectStatus(objPool.GetComponentItem<VFXController>());
        //	}
        //}

        void OnEffectLoadComplete(string pathOrAddress, UnityObject returnObject, SystemObject userData)
        {
            LoadData d = userData as LoadData;

            if (!m_AssetName.Equals(d.assetName))
            {
                // 可能有这种情况:
                // A特效 请求加载. 没加载完的时候A特效就回收了. B 特效使用了同一个EffectController, 也请求加载. 这时候A刚加载完
                return;
            }

            if (!m_EffectID.Equals(d.effectID))
            {
                return;
            }

            if (returnObject == null)
            {
                return;
            }

            m_AssetLoadHandler = null;

            GameObject effectGO = (GameObject)returnObject;

            // 读取完的时候, 特效已经销毁了
            if (m_Status == EffectStatus.Recycled)
            {
                RecycleFX();
                return;
            }

            // 读取资源错误
            if (effectGO == null)
            {
                DebugUtility.LogError(LOG_TAG, $"EffectController::OnEffectLoadComplete. 读取资源失败: {m_AssetName}");
                RecycleFX();
                return;
            }

            // 没挂脚本, 就不自动挂了, 省的老是忽略这个错误
            VFXController vfx = effectGO.GetComponent <VFXController>();

            if (vfx == null)
            {
                DebugUtility.LogError(LOG_TAG, $"EffectController::OnEffectLoadComplete. 特效没有正确地挂脚本: {m_AssetName}");
                RecycleFX();
                return;
            }

            if (!effectGO.IsPooled())
            {
                effectGO.CreatePool(1, pathOrAddress);
            }

            VFXController vfxInstance = vfx.Spawn();

            vfxInstance.DoSpawned();
            _SetEffectAndUpdateEffectStatus(vfxInstance);
        }