网上演练贵港万达广场(人员密集)
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.
 
 
 

122 lines
3.8 KiB

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class LoadAssetBundles : MonoBehaviour
{
// Use this for initialization
private static LoadAssetBundles instance;
private static string localFilePath;
private AssetBundleManifest manifest;
private static string ManifestName;
void Start()
{
}
// Update is called once per frame
void Update()
{
}
public void GetAssetBundleManifest()
{
AssetBundle bundle = AssetBundle.LoadFromFile(localFilePath + ManifestName);
if (bundle == null)
{
Debug.Log("Failed to load AssetBundle!");
}
else
{
manifest = bundle.LoadAsset<AssetBundleManifest>("AssetBundleManifest");
bundle.Unload(false);
}
}
public static LoadAssetBundles getInstance()
{
if (instance == null)
{
instance = new LoadAssetBundles();
localFilePath = Application.dataPath + "/AssetBundles/";
ManifestName = "AssetBundles";
}
return instance;
}
public IEnumerator LoadAssetByName<T>(string fileName, Action<T> callback) where T : UnityEngine.Object
{
AssetManager manager=AssetManager.getInstance();
//先从资源管理器取,如果没有再从资源包中加载
if (manager.assetObject.ContainsKey(fileName))
{
//Debug.Log("从资源管理器中加载了");
T obj = manager.assetObject[fileName] as T;
callback(obj);
}
else
{
//Debug.Log("从资源包加载了");
if (manifest == null)
{
GetAssetBundleManifest();
}
string[] dependencies = manifest.GetAllDependencies(fileName);
AssetBundle[] dpsBundles = new AssetBundle[dependencies.Length];
for (int i = 0; i < dpsBundles.Length; i++)
{
string path = localFilePath + dependencies[i];
Debug.Log(path);
dpsBundles[i] = AssetBundle.LoadFromFile(path);
}
string mainPath = localFilePath + fileName;
AssetBundle mainBundle = AssetBundle.LoadFromFile(mainPath);
if (mainBundle == null)
{
Debug.Log("Failed to load AssetBundle!");
yield return null;
}
T obj = mainBundle.LoadAsset<T>(fileName);
manager.assetObject.Add(fileName, obj);//加入到资源管理器
callback(obj);
//yield return new WaitForSeconds(1f);
mainBundle.Unload(false);
for (int j = 0; j < dependencies.Length; j++)
{
dpsBundles[j].Unload(false);
}
}
}
public IEnumerator LoadSceneByName(string fileName, Action callback)
{
if (manifest == null)
{
GetAssetBundleManifest();
}
string[] dependencies = manifest.GetAllDependencies(fileName);
AssetBundle[] dpsBundles = new AssetBundle[dependencies.Length];
for (int i = 0; i < dpsBundles.Length; i++)
{
string path = localFilePath + dependencies[i];
dpsBundles[i] = AssetBundle.LoadFromFile(path);
}
string mainPath = localFilePath + fileName;
AssetBundle mainBundle = AssetBundle.LoadFromFile(mainPath);
if (mainBundle == null)
{
Debug.Log("Failed to load AssetBundle!");
yield return null;
}
//mainBundle.LoadAsset<GameObject>(fileName);
callback();
yield return new WaitForSeconds(1f);
mainBundle.Unload(false);
for (int j = 0; j < dependencies.Length; j++)
{
dpsBundles[j].Unload(false);
}
}
}