Net-Game/Library/PackageCache/com.unity.2d.common@bb1fc9b3d81b/Samples~/SpriteAtlas/FromAssetBundle/LoadFromAssetBundle.cs
2025-03-28 08:33:16 -04:00

79 lines
2.2 KiB
C#

using System.Collections;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
using UnityEngine.Networking;
using UnityEngine.U2D;
public class LoadFromAssetBundle : MonoBehaviour
{
List<string> tags = new List<string>();
void Awake()
{
#if !ENABLE_WEB_REQUEST_ASSET_BUNDLE
Debug.Log("Please enable UnityWebRequestAssetBundle Module from PackageManager");
#endif
}
#if ENABLE_WEB_REQUEST_ASSET_BUNDLE
void OnEnable()
{
SpriteAtlasManager.atlasRequested += RequestLateBindingAtlas;
SpriteAtlasManager.atlasRegistered += AtlasRegistered;
}
void OnDisable()
{
SpriteAtlasManager.atlasRequested -= RequestLateBindingAtlas;
SpriteAtlasManager.atlasRegistered -= AtlasRegistered;
}
void RequestLateBindingAtlas(string tag, System.Action<SpriteAtlas> action)
{
if (null == tags.FirstOrDefault(stringToCheck => stringToCheck.Contains(tag)))
{
tags.Add(tag);
StartCoroutine(LoadAssetBundle(tag, action));
}
}
IEnumerator LoadAssetBundle(string tag, System.Action<SpriteAtlas> callback)
{
var assetbundleToLoad = "atlasbundle";
UnityWebRequest loadOp;
if (Application.platform == RuntimePlatform.Android)
{
loadOp = UnityWebRequestAssetBundle.GetAssetBundle(Application.streamingAssetsPath + "/" + assetbundleToLoad);
}
else
{
loadOp = UnityWebRequestAssetBundle.GetAssetBundle("file://" + Application.streamingAssetsPath + "/" + assetbundleToLoad);
}
yield return loadOp.SendWebRequest();
if (loadOp.result != UnityWebRequest.Result.Success)
{
Debug.Log(loadOp.error);
}
else
{
var ab = DownloadHandlerAssetBundle.GetContent(loadOp);
if (null != ab)
{
var sa = ab.LoadAsset<SpriteAtlas>("fromassetbundle.spriteatlasv2");
callback(sa);
Debug.Log("AssetBundle : " + tag + " has Atlas " + sa.name);
}
}
}
void AtlasRegistered(SpriteAtlas spriteAtlas)
{
Debug.LogFormat("Registered {0}.", spriteAtlas.name);
}
#endif
}