示例#1
0
 IEnumerator WaitLoadLevel(AssetBundleLoadLevelOperation operation, UnityAction <float> onProgressChanged)
 {
     while (!operation.IsDone())
     {
         if (operation.m_Request != null)
         {
             operation.m_Request.allowSceneActivation = false;
             if (operation.m_Request.progress >= 0.9f)
             {
                 operation.m_Request.allowSceneActivation = true;
                 if (onProgressChanged != null)
                 {
                     onProgressChanged(1);
                 }
                 break;
             }
             else
             {
                 if (onProgressChanged != null)
                 {
                     onProgressChanged(operation.m_Request.progress);
                 }
             }
         }
         yield return(null);
     }
 }
示例#2
0
	// Load level from the given assetBundle.
	static public AssetBundleLoadOperation LoadLevelAsync (string assetBundleName, string levelName, bool isAdditive)
	{
		AssetBundleLoadOperation operation = null;
#if UNITY_EDITOR
		if (SimulateAssetBundleInEditor)
		{
			string[] levelPaths = AssetDatabase.GetAssetPathsFromAssetBundleAndAssetName(assetBundleName, levelName);
			if (levelPaths.Length == 0)
			{
				///@TODO: The error needs to differentiate that an asset bundle name doesn't exist
				//        from that there right scene does not exist in the asset bundle...
			
				Debug.LogError("There is no scene with name \"" + levelName + "\" in " + assetBundleName);
				return null;
			}

			if (isAdditive)
				EditorApplication.LoadLevelAdditiveInPlayMode(levelPaths[0]);
			else
				EditorApplication.LoadLevelInPlayMode(levelPaths[0]);

			operation = new AssetBundleLoadLevelSimulationOperation();
		}
		else
#endif
		{
			LoadAssetBundle (assetBundleName);
			operation = new AssetBundleLoadLevelOperation (assetBundleName, levelName, isAdditive);

			m_InProgressOperations.Add (operation);
		}

		return operation;
	}
 static public int Update(IntPtr l)
 {
     try {
                     #if DEBUG
         var    method     = System.Reflection.MethodBase.GetCurrentMethod();
         string methodName = GetMethodName(method);
                     #if UNITY_5_5_OR_NEWER
         UnityEngine.Profiling.Profiler.BeginSample(methodName);
                     #else
         Profiler.BeginSample(methodName);
                     #endif
                     #endif
         AssetBundleLoadLevelOperation self = (AssetBundleLoadLevelOperation)checkSelf(l);
         var ret = self.Update();
         pushValue(l, true);
         pushValue(l, ret);
         return(2);
     }
     catch (Exception e) {
         return(error(l, e));
     }
             #if DEBUG
     finally {
                     #if UNITY_5_5_OR_NEWER
         UnityEngine.Profiling.Profiler.EndSample();
                     #else
         Profiler.EndSample();
                     #endif
     }
             #endif
 }
 static public int constructor(IntPtr l)
 {
     try {
                     #if DEBUG
         var    method     = System.Reflection.MethodBase.GetCurrentMethod();
         string methodName = GetMethodName(method);
                     #if UNITY_5_5_OR_NEWER
         UnityEngine.Profiling.Profiler.BeginSample(methodName);
                     #else
         Profiler.BeginSample(methodName);
                     #endif
                     #endif
         AssetBundleLoadLevelOperation o;
         System.String a1;
         checkType(l, 2, out a1);
         System.String a2;
         checkType(l, 3, out a2);
         o = new AssetBundleLoadLevelOperation(a1, a2);
         pushValue(l, true);
         pushValue(l, o);
         return(2);
     }
     catch (Exception e) {
         return(error(l, e));
     }
             #if DEBUG
     finally {
                     #if UNITY_5_5_OR_NEWER
         UnityEngine.Profiling.Profiler.EndSample();
                     #else
         Profiler.EndSample();
                     #endif
     }
             #endif
 }
示例#5
0
    public static AssetBundleLoadOperation LoadLevelAsync(string assetBundleName, string levelName, bool isAdditive, string manifestAssetBundleName = null)
    {
        LoadAssetBundle(assetBundleName, false, null, levelName)?.Ensure();
        var ll = new AssetBundleLoadLevelOperation(assetBundleName, levelName, isAdditive, manifestAssetBundleName);

        ll.Update();
        return(ll);
    }
示例#6
0
    public static AssetBundleLoadOperation LoadLevelAsync(string assetBundleName, string levelName, bool isAdditive, ILoadingProgress loadingProgress = null)
    {
        LoadAssetBundle(assetBundleName, 0);
        AssetBundleLoadOperation operation = new AssetBundleLoadLevelOperation(assetBundleName, levelName, isAdditive, ref loadingProgress);

        inProgressOperationList.Add(operation);
        return(operation);
    }
    // Load level from the given assetBundle.
    static public AssetBundleLoadLevelOperation LoadLevelAsync(string assetBundleName, string levelName, bool isAdditive)
    {
        AssetBundleLoadLevelOperation operation = null;

        LoadAssetBundle(assetBundleName);
        operation = new AssetBundleLoadLevelOperation(assetBundleName, levelName, isAdditive);
        m_InProgressOperations.Add(operation);
        return(operation);
    }
    static int LoadLevelAsync(IntPtr L)
    {
        LuaScriptMgr.CheckArgsCount(L, 3);
        string arg0 = LuaScriptMgr.GetLuaString(L, 1);
        string arg1 = LuaScriptMgr.GetLuaString(L, 2);
        bool   arg2 = LuaScriptMgr.GetBoolean(L, 3);
        AssetBundleLoadLevelOperation o = ResourceManager.LoadLevelAsync(arg0, arg1, arg2);

        LuaScriptMgr.Push(L, o);
        return(1);
    }
示例#9
0
    public static AssetBundleLoadOperation LoadLevelAsync(string bundleName, string levelName, bool isAdditive)
    {
        Debug.Log("Load level: " + bundleName + " - " + levelName + " - " + isAdditive);

        LoadBunlde(bundleName);
        AssetBundleLoadOperation operation = new AssetBundleLoadLevelOperation(bundleName, levelName, isAdditive);

        inProgressOperations.Add(operation);

        return(operation);
    }
    // Load level from the given assetBundle.
    public AssetBundleLoadOperation LoadLevelAsync(string a_assetBundleName, string a_levelName, bool a_isAdditive, bool a_allowSceneActivation)
    {
        AssetBundleLoadOperation operation = null;

#if UNITY_EDITOR
        if (SimulateAssetBundleInEditor)
        {
            var levelPaths = AssetDatabase.GetAssetPathsFromAssetBundleAndAssetName(a_assetBundleName, a_levelName);
            if (levelPaths.Length == 0)
            {
                ///@TODO: The error needs to differentiate that an asset bundle name doesn't exist
                //        from that there right scene does not exist in the asset bundle...

                Debug.LogError("There is no scene with name \"" + a_levelName + "\" in " + a_assetBundleName);
                return(null);
            }

            if (a_isAdditive)
            {
                EditorApplication.LoadLevelAdditiveInPlayMode(levelPaths[0]);
            }
            else
            {
                EditorApplication.LoadLevelInPlayMode(levelPaths[0]);
            }

            operation = new AssetBundleLoadLevelSimulationOperation();
        }
        else
#endif
        {
            var key = AssetToKey(a_assetBundleName, a_levelName);

            AssetBundleLoadOperation inProgressOperation;
            if (m_inProgressOperationsByName.TryGetValue(key, out inProgressOperation))
            {
                var loadLevelOperation = inProgressOperation as AssetBundleLoadLevelOperation;
                if (loadLevelOperation != null)
                {
                    return(loadLevelOperation);
                }
            }

            LoadAssetBundle(a_assetBundleName);
            operation = new AssetBundleLoadLevelOperation(a_assetBundleName, a_levelName, a_isAdditive, a_allowSceneActivation);

            m_inProgressOperationsByName.Add(key, operation);
            m_inProgressOperations.Add(new KeyValuePair <string, AssetBundleLoadOperation>(key, operation));
        }

        return(operation);
    }
示例#11
0
    public static AssetBundleLoadOperation LoadLevelAsync(string assetBundleName, string levelName)
    {
        AssetBundleLoadOperation operation = null;

#if UNITY_EDITOR
        if (SimulateAssetBundleInEditor)
        {
            operation = new AssetBundleLoadLevelSimulationOperation(assetBundleName, levelName);
        }
        else
#endif
        {
            assetBundleName = RemapVariantName(assetBundleName);
            LoadAssetBundle(assetBundleName, true);
            operation = new AssetBundleLoadLevelOperation(assetBundleName, levelName);
            m_InProgressOperations.Add(operation);
        }
        return(operation);
    }
示例#12
0
    // Load level from the given assetBundle.
    public static AMLoadOperation LoadLevelAsync(string assetBundleName, string levelName, bool isAdditive)
    {
        AMLoadOperation operation = null;

#if UNITY_EDITOR
        if (SimulateAssetBundleInEditor)
        {
            operation = new AssetBundleLoadLevelSimulationOperation(assetBundleName, levelName, isAdditive);
        }
        else
#endif
        {
            LoadAssetBundle(assetBundleName, false);
            operation = new AssetBundleLoadLevelOperation(assetBundleName, levelName, isAdditive);

            m_inProgressOperations.Add(operation);
        }

        return(operation);
    }
示例#13
0
        public string LoadSceneAsync(string assetBundle, string sceneName, bool isAdditive, bool allowSceneActivation = true, OnLoadComplete callback = null)
        {
            if (string.IsNullOrEmpty(assetBundle))
            {
                return(string.Empty);
            }

            assetBundle = assetBundle.ToLower();

            if (IsInLoading(sceneName))
            {
                RegistCallback(sceneName, callback);
                return(sceneName);
            }

            RegistCallback(sceneName, callback);
            m_LoadSceneOpration  = AssetBundleManager.LoadLevelAsync(assetBundle, sceneName, isAdditive, allowSceneActivation);
            LoadingSceneProgress = 0;

            return(sceneName);
        }
示例#14
0
    /// <summary>
    /// Loads the level async.
    /// </summary>
    /// <returns>The level async.</returns>
    /// <param name="assetBundleName">Asset bundle name.</param>
    /// <param name="levelName">Level name.</param>
    /// <param name="isAdditive">If set to <c>true</c> is additive.</param>
    public static AssetLoadOperation LoadLevelAsync(string assetBundleName, string levelName, bool isAdditive)
    {
        AssetLoadOperation operation = null;

#if UNITY_EDITOR
        if (SimulateAssetBundleInEditor)
        {
            operation = new AssetBundleLoadLevelSimulationOperation(assetBundleName, levelName, isAdditive);
        }
        else
#endif
        {
            CollectionDependenciesLoadTask(assetBundleName);

            operation = new AssetBundleLoadLevelOperation(assetBundleName, levelName, isAdditive);

            m_InProgressOperations.Add(operation);
        }

        return(operation);
    }
    /// <summary>
    /// 从url加载出场景
    /// </summary>
    /// <param name="assetBundleName"></param>
    /// <param name="assetName"></param>
    /// <param name="isAddictive"></param>
    /// <param name="onLevelLoad"></param>
    public void LoadLevelFromUrlAsync(string assetBundleName, string assetName, bool isAddictive, UnityAction <float> onProgressChange)
    {
#if UNITY_EDITOR
        if (canSimulation && SimulateAssetBundleInEditor)
        {
            simuationLoader.LoadSceneAsync(assetBundleName, assetName, isAddictive, onProgressChange);
            return;
        }
#endif
        if (activeLoader != null)
        {
            LoadMenu(() =>
            {
                AssetBundleLoadLevelOperation operation = activeLoader.LoadLevelAsync(assetBundleName, assetName, isAddictive);
                StartCoroutine(WaitLoadLevel(operation, onProgressChange));
            });
        }
        else
        {
            Debug.Log("Please Set Menu");
        }
    }
示例#16
0
 public void Load()
 {
     if (!this.assetBundleName.IsNullOrEmpty())
     {
         if (!this.isAsync)
         {
             AssetBundleManager.LoadLevel(this.assetBundleName, this.levelName, this.isAdd, this.manifestFileName);
         }
         else
         {
             this.assetBundleOperation = AssetBundleManager.LoadLevelAsync(this.assetBundleName, this.levelName, this.isAdd, this.manifestFileName) as AssetBundleLoadLevelOperation;
         }
     }
     else if (!this.isAsync)
     {
         SceneManager.LoadScene(this.levelName, !this.isAdd ? (LoadSceneMode)0 : (LoadSceneMode)1);
     }
     else
     {
         this.operation = SceneManager.LoadSceneAsync(this.levelName, !this.isAdd ? (LoadSceneMode)0 : (LoadSceneMode)1);
     }
 }
    IEnumerator WaitLoadLevel(AssetBundleLoadLevelOperation operation, UnityAction <float> onProgressChanged)
    {
        var retio = 0.7f;

        while (!operation.IsDone())
        {
            if (operation.m_Request != null)
            {
                Debug.Log("operation.m_Request.progress:" + operation.m_Request.progress);
                operation.m_Request.allowSceneActivation = false;
                if (operation.m_Request.progress >= 0.9f)
                {
                    operation.m_Request.allowSceneActivation = true;
                    if (onProgressChanged != null)
                    {
                        onProgressChanged(1);
                    }
                    break;
                }
                else
                {
                    if (onProgressChanged != null)
                    {
                        onProgressChanged(operation.m_Request.progress * (1 - retio) + retio);
                    }
                }
            }
            else
            {
                Debug.Log("operation.progress:" + operation.progress);
                onProgressChanged(operation.progress * retio);
            }
            yield return(null);
        }

        //activeLoader.UnloadAssetBundle(operation.AssetBundleName);
        System.GC.Collect();
    }
示例#18
0
    // Load level from the given assetBundle.
    // *********** 주요 사용하는 함수 ***********
    static public AssetBundleLoadOperation LoadLevelAsync(string assetBundleName, string levelName, bool isAdditive)
    {
        Log(LogType.Info, "Loading " + levelName + " from " + assetBundleName + " bundle");

        AssetBundleLoadOperation operation = null;

#if UNITY_EDITOR
        if (SimulateAssetBundleInEditor)
        {
            operation = new AssetBundleLoadLevelSimulationOperation(assetBundleName, levelName, isAdditive);
        }
        else
#endif
        {
            assetBundleName = RemapVariantName(assetBundleName);
            LoadAssetBundle(assetBundleName);
            operation = new AssetBundleLoadLevelOperation(assetBundleName, levelName, isAdditive);

            m_InProgressOperations.Add(operation);
        }

        return(operation);
    }
示例#19
0
        private void OnSceneLoaded(Scene scene, LoadSceneMode mode)
        {
            m_LoadSceneMode = mode;

            if (m_LoadSceneOpration != null)
            {
                m_LoadedScenesAssetBundle[scene.name] = m_LoadSceneOpration.AssetBundle;
            }

            if (mode == LoadSceneMode.Single)
            {
                IsLoadingScene       = false;
                LoadingSceneProgress = 1;
                Callback(scene.name);
                m_LoadSceneOpration = null;
            }
            else if (mode == LoadSceneMode.Additive)
            {
                IsLoadingScene       = false;
                LoadingSceneProgress = 1;
                Callback(scene.name);
                m_LoadSceneOpration = null;
            }
        }
示例#20
0
        protected override void OnUpdate(float delta)
        {
            base.OnUpdate(delta);

            if (!IsInited)
            {
                // 等AssetBundleManifest初始化完成,再继续更新其他Operation
#if UNITY_EDITOR
                if (AssetBundleManager.SimulateAssetBundleInEditor)
                {
                    IsInited = true;
                    Callback(Utility.GetPlatformName());
                }
                else
                {
#endif
                if (m_AssetBundleLoadManifestOperation != null && m_AssetBundleLoadManifestOperation.IsDone())
                {
                    IsInited = true;
                    Callback(Utility.GetPlatformName(), m_AssetBundleLoadManifestOperation.GetAsset <AssetBundleManifest>(), m_AssetBundleLoadManifestOperation.Error);
                    m_AssetBundleLoadManifestOperation = null;
                }
#if UNITY_EDITOR
            }
#endif
            }
            else
            {
                //bundle
                UpdateLoadAssets();

                //场景
                if (m_LoadSceneOpration != null)
                {
                    IsLoadingScene       = true;
                    LoadingSceneProgress = m_LoadSceneOpration.Progress();

                    if (m_LoadSceneOpration.IsDone() && !string.IsNullOrEmpty(m_LoadSceneOpration.Error))
                    {
                        IsLoadingScene = false;
                        Callback(m_LoadSceneOpration.LevelName, null, m_LoadSceneOpration.Error);
                        m_LoadSceneOpration = null;
                    }
                }
            }

#if UNITY_EDITOR
            if (isDirty)
            {
                isDirty = false;
                InspectorShower.Clear();
                InspectorShower.AddRange(m_AssetCaches.Values);
                InspectorShower.Sort(
                    (a, b) =>
                {
                    if (a.hold != b.hold)
                    {
                        return(a.hold - b.hold);
                    }
                    else if (a.refCount != b.refCount)
                    {
                        return(b.refCount - a.refCount);
                    }
                    else
                    {
                        return(string.Compare(a.assetName, b.assetName));
                    }
                });
            }
#endif
        }
        // Starts a load operation for a level from the given asset bundle.
        static public AssetBundleLoadOperation LoadLevelAsync(string assetBundleName, string levelName, bool isAdditive)
        {
            Log(LogType.Info, "Loading " + levelName + " from " + assetBundleName + " bundle");

            AssetBundleLoadOperation operation = null;
    #if UNITY_EDITOR
            if (SimulateAssetBundleInEditor)
            {
                operation = new AssetBundleLoadLevelSimulationOperation(assetBundleName, levelName, isAdditive);
            }
            else
    #endif
            {
                assetBundleName = RemapVariantName(assetBundleName);
                LoadAssetBundle(assetBundleName);
                operation = new AssetBundleLoadLevelOperation(assetBundleName, levelName, isAdditive);

                m_InProgressOperations.Add(operation);
            }

            return operation;
        }
示例#22
0
 // Load level from the given assetBundle.
 public static AssetBundleLoadLevelOperation LoadLevelAsync(string assetBundleName, string levelName, bool isAdditive)
 {
     AssetBundleLoadLevelOperation operation = null;
     LoadAssetBundle(assetBundleName);
     operation = new AssetBundleLoadLevelOperation(assetBundleName, levelName, isAdditive);
     m_InProgressOperations.Add(operation);
     return operation;
 }
示例#23
0
        public static AssetBundleLoadOperation LoadLevelAsync(string assetBundleName, string levelName, bool isAdditive)
        {
            Log(LogType.Info, "Loading " + levelName + " from " + assetBundleName + " bundle");

            AssetBundleLoadOperation operation = null;

            assetBundleName = RemapVariantName(assetBundleName);
            LoadAssetBundle(assetBundleName);
            operation = new AssetBundleLoadLevelOperation(assetBundleName, levelName, isAdditive);
            _operations.Add(operation);

            return operation;
        }
    // Load level from the given assetBundle.
    public static AssetBundleLoadOperation LoadLevelAsync(string assetBundleName, string levelName, bool isAdditive)
    {
        AssetBundleLoadOperation operation = null;
        #if UNITY_EDITOR
        if (SimulateAssetBundleInEditor)
        {
            string[] levelPaths = AssetDatabase.GetAssetPathsFromAssetBundleAndAssetName(assetBundleName, levelName);
            if (levelPaths.Length == 0)
            {
                ///@TODO: The error needs to differentiate that an asset bundle name doesn't exist
                //        from that there right scene does not exist in the asset bundle...

                Debug.LogError("There is no scene with name \"" + levelName + "\" in " + assetBundleName);
                return null;
            }

            if (isAdditive)
                EditorApplication.LoadLevelAdditiveInPlayMode(levelPaths[0]);
            else
                EditorApplication.LoadLevelInPlayMode(levelPaths[0]);

            operation = new AssetBundleLoadLevelSimulationOperation();
        }
        else
        #endif
        {
            LoadAssetBundle (assetBundleName);
            operation = new AssetBundleLoadLevelOperation (assetBundleName, levelName, isAdditive);

            m_InProgressOperations.Add (operation);
        }

        return operation;
    }