You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
197 lines
4.1 KiB
197 lines
4.1 KiB
using UnityEngine; |
|
using System.Collections; |
|
using UnityEngine.SceneManagement; |
|
|
|
public abstract class AssetBundleLoadOperation : IEnumerator |
|
{ |
|
public object Current |
|
{ |
|
get |
|
{ |
|
return null; |
|
} |
|
} |
|
public bool MoveNext() |
|
{ |
|
return !IsDone(); |
|
} |
|
|
|
public void Reset() |
|
{ |
|
} |
|
|
|
abstract public bool Update (); |
|
|
|
abstract public bool IsDone (); |
|
} |
|
|
|
public class AssetBundleLoadLevelSimulationOperation : AssetBundleLoadOperation |
|
{ |
|
public AssetBundleLoadLevelSimulationOperation () |
|
{ |
|
} |
|
|
|
public override bool Update () |
|
{ |
|
return false; |
|
} |
|
|
|
public override bool IsDone () |
|
{ |
|
return true; |
|
} |
|
} |
|
|
|
public class AssetBundleLoadLevelOperation : AssetBundleLoadOperation |
|
{ |
|
protected string m_AssetBundleName; |
|
protected string m_LevelName; |
|
protected bool m_IsAdditive; |
|
protected string m_DownloadingError; |
|
protected AsyncOperation m_Request; |
|
|
|
public AssetBundleLoadLevelOperation (string assetbundleName, string levelName, bool isAdditive) |
|
{ |
|
m_AssetBundleName = assetbundleName; |
|
m_LevelName = levelName; |
|
m_IsAdditive = isAdditive; |
|
} |
|
|
|
public override bool Update () |
|
{ |
|
if (m_Request != null) |
|
return false; |
|
|
|
LoadedAssetBundle bundle = AssetBundleManager.GetLoadedAssetBundle (m_AssetBundleName, out m_DownloadingError); |
|
if (bundle != null) |
|
{ |
|
if (m_IsAdditive) |
|
m_Request = SceneManager.LoadSceneAsync(m_LevelName,LoadSceneMode.Additive); |
|
else |
|
m_Request = SceneManager.LoadSceneAsync(m_LevelName); |
|
return false; |
|
} |
|
else |
|
return true; |
|
} |
|
|
|
public override bool IsDone () |
|
{ |
|
// Return if meeting downloading error. |
|
// m_DownloadingError might come from the dependency downloading. |
|
if (m_Request == null && m_DownloadingError != null) |
|
{ |
|
Debug.LogError(m_DownloadingError); |
|
return true; |
|
} |
|
|
|
return m_Request != null && m_Request.isDone; |
|
} |
|
} |
|
|
|
public abstract class AssetBundleLoadAssetOperation : AssetBundleLoadOperation |
|
{ |
|
public abstract T GetAsset<T>() where T : UnityEngine.Object; |
|
} |
|
|
|
public class AssetBundleLoadAssetOperationSimulation : AssetBundleLoadAssetOperation |
|
{ |
|
Object m_SimulatedObject; |
|
|
|
public AssetBundleLoadAssetOperationSimulation (Object simulatedObject) |
|
{ |
|
m_SimulatedObject = simulatedObject; |
|
} |
|
|
|
public override T GetAsset<T>() |
|
{ |
|
return m_SimulatedObject as T; |
|
} |
|
|
|
public override bool Update () |
|
{ |
|
return false; |
|
} |
|
|
|
public override bool IsDone () |
|
{ |
|
return true; |
|
} |
|
} |
|
|
|
public class AssetBundleLoadAssetOperationFull : AssetBundleLoadAssetOperation |
|
{ |
|
protected string m_AssetBundleName; |
|
protected string m_AssetName; |
|
protected string m_DownloadingError; |
|
protected System.Type m_Type; |
|
protected AssetBundleRequest m_Request = null; |
|
|
|
public AssetBundleLoadAssetOperationFull (string bundleName, string assetName, System.Type type) |
|
{ |
|
m_AssetBundleName = bundleName; |
|
m_AssetName = assetName; |
|
m_Type = type; |
|
} |
|
|
|
public override T GetAsset<T>() |
|
{ |
|
if (m_Request != null && m_Request.isDone) |
|
return m_Request.asset as T; |
|
else |
|
return null; |
|
} |
|
|
|
// Returns true if more Update calls are required. |
|
public override bool Update () |
|
{ |
|
if (m_Request != null) |
|
return false; |
|
|
|
LoadedAssetBundle bundle = AssetBundleManager.GetLoadedAssetBundle (m_AssetBundleName, out m_DownloadingError); |
|
if (bundle != null) |
|
{ |
|
m_Request = bundle.m_AssetBundle.LoadAssetAsync (m_AssetName, m_Type); |
|
return false; |
|
} |
|
else |
|
{ |
|
return true; |
|
} |
|
} |
|
|
|
public override bool IsDone () |
|
{ |
|
// Return if meeting downloading error. |
|
// m_DownloadingError might come from the dependency downloading. |
|
if (m_Request == null && m_DownloadingError != null) |
|
{ |
|
Debug.LogError(m_DownloadingError); |
|
return true; |
|
} |
|
|
|
return m_Request != null && m_Request.isDone; |
|
} |
|
} |
|
|
|
public class AssetBundleLoadManifestOperation : AssetBundleLoadAssetOperationFull |
|
{ |
|
public AssetBundleLoadManifestOperation (string bundleName, string assetName, System.Type type) |
|
: base(bundleName, assetName, type) |
|
{ |
|
} |
|
|
|
public override bool Update () |
|
{ |
|
base.Update(); |
|
|
|
if (m_Request != null && m_Request.isDone) |
|
{ |
|
AssetBundleManager.AssetBundleManifestObject = GetAsset<AssetBundleManifest>(); |
|
return false; |
|
} |
|
else |
|
return true; |
|
} |
|
} |
|
|
|
|