基于Unity用C#语言编写一个资源管理类,要求如下:
使用协程加载加载AssetBundle,支持优先级队列,尽量考虑加载新能。
设置打包编辑器:
#if UNITY_EDITOR
using UnityEngine;
using UnityEditor;
using System.Collections;
using System.IO;
public class AssetBundle
{
//编辑器扩展,在菜单栏Assets下生成Build AssetBundles菜单
[MenuItem("Assets/Build AssetBundles")]
//进行资源打包
static void BuildAllAssetBundles()
{
//打包之前要保证文件夹存在,不存在的话会报错
//使用相对路径保存
string dir = "AssetBundle";
if (Directory.Exists(dir) == false)
{
Directory.CreateDirectory(dir);
}
//BuildPipeline是UnityEditor中用于打包的类,其中的BuildAssetBundle用于AssetBundle打包
//dir:存储的路径
//BuildAssetBundleOptions:表示压缩式的算法 None为LZMA算法
//BuildTarget: 表示用于什么平台
BuildPipeline.BuildAssetBundles(dir, BuildAssetBundleOptions.None, BuildTarget.StandaloneWindows64);
Debug.Log("打包成功!");
}
}
#endif
第一种实现方式:
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking; //UnityWebRequest
using UnityEngine.UI;
public class RS : MonoBehaviour //资源管理类,进行资源优先级排序并进行资源加载
{
/*
//UnityWebRequest加载测试实例,用来检测一开始是否加载成功
IEnumerator Start()
{//使用UnityWebRequest
string uri = @"http://localhost:56000/AssetBundle/image1.unity3d"; //获取请求,注意端口号
UnityWebRequest request = UnityWebRequest.GetAssetBundle(uri);
yield return request.SendWebRequest(); //等待请求发送完
Debug.Log(request);
//DownloadHandlerAssetBundle.GetContent(request); 注意,此时仅仅是取得ab对象
//AssetBundle ab = (request.downloadHandler as DownloadHandlerAssetBundle).assetBundle;
UnityE