102 lines
2.9 KiB
C#
102 lines
2.9 KiB
C#
|
|
using System;
|
|||
|
|
using System.Collections;
|
|||
|
|
using System.Collections.Generic;
|
|||
|
|
using System.IO;
|
|||
|
|
using UnityEngine;
|
|||
|
|
using UnityEngine.SceneManagement;
|
|||
|
|
using Object = UnityEngine.Object;
|
|||
|
|
|
|||
|
|
namespace ZXKFramework
|
|||
|
|
{
|
|||
|
|
public class ResAssetBundleSimple : IRes
|
|||
|
|
{
|
|||
|
|
Dictionary<string, AbItem> allAbItems = new Dictionary<string, AbItem>();
|
|||
|
|
public void Load<T>(string assetName, Action<T> action = null) where T : Object
|
|||
|
|
{
|
|||
|
|
string tipType = typeof(T).Name;
|
|||
|
|
switch (tipType)
|
|||
|
|
{
|
|||
|
|
case "Sprite":
|
|||
|
|
break;
|
|||
|
|
case "AudioClip":
|
|||
|
|
break;
|
|||
|
|
case "GameObject":
|
|||
|
|
GameObject loObj = Load(new AssetBundleLoadData() { abName = assetName });
|
|||
|
|
action?.Invoke(loObj as T);
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private GameObject Load(AssetBundleLoadData data)
|
|||
|
|
{
|
|||
|
|
if (!allAbItems.ContainsKey(data.abName))
|
|||
|
|
{
|
|||
|
|
AbItem temp = new AbItem(data);
|
|||
|
|
allAbItems.Add(data.abName,temp);
|
|||
|
|
return temp.obj;
|
|||
|
|
}
|
|||
|
|
return null;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public void UnLoadAll()
|
|||
|
|
{
|
|||
|
|
foreach (var o in allAbItems.Values)
|
|||
|
|
{
|
|||
|
|
o.asset.Unload(true);
|
|||
|
|
if (o.obj != null)
|
|||
|
|
{
|
|||
|
|
GameObject.Destroy(o.obj);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
allAbItems.Clear();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public class AbItem
|
|||
|
|
{
|
|||
|
|
public AssetBundle asset { get; set; }
|
|||
|
|
public GameObject obj { get; set; } = null;
|
|||
|
|
private AssetBundleLoadData mData;
|
|||
|
|
public AbItem(AssetBundleLoadData data)
|
|||
|
|
{
|
|||
|
|
mData = data;
|
|||
|
|
string path = GetPath(data.abName);
|
|||
|
|
if (!File.Exists(path))
|
|||
|
|
{
|
|||
|
|
Debug.Log("<22><><EFBFBD><EFBFBD>AB<41><42><EFBFBD>岻<EFBFBD><E5B2BB><EFBFBD>ڣ<EFBFBD>" + path);
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
asset = AssetBundle.LoadFromFile(path);
|
|||
|
|
obj = asset.LoadAsset<GameObject>(data.abName);
|
|||
|
|
asset.Unload(false);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
string GetPath(string theName)
|
|||
|
|
{
|
|||
|
|
string pos = "";
|
|||
|
|
#if UNITY_ANDROID
|
|||
|
|
pos = "Android";
|
|||
|
|
#elif UNITY_IOS
|
|||
|
|
pos = "IOS";
|
|||
|
|
#elif UNITY_EDITOR_WIN
|
|||
|
|
pos = "Windows";
|
|||
|
|
#endif
|
|||
|
|
if (string.IsNullOrEmpty(mData.path))
|
|||
|
|
{
|
|||
|
|
mData.path = Application.persistentDataPath;
|
|||
|
|
}
|
|||
|
|
string thePath = mData.path + "/Assetbundle/" + pos;
|
|||
|
|
if (!Directory.Exists(thePath))
|
|||
|
|
Directory.CreateDirectory(thePath);
|
|||
|
|
thePath = thePath + "/" + theName.ToLower() + ".assetbundle";
|
|||
|
|
return thePath;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public struct AssetBundleLoadData
|
|||
|
|
{
|
|||
|
|
public string abName { get; set; }
|
|||
|
|
public string path { get; set; }
|
|||
|
|
}
|
|||
|
|
}
|