1.使用插件AssetBundleManager
1.1 资源导出
使用Asset/AssetBundles/BuildAssetBundles进行资源导出,资源导出的时候会根据当前的平台导出成Windows/Android/IOS等。导出的位置在AssetBundles目录下,该目录下会分出Windows/Android/IOS等目录。
1.2 资源加载
当使用AssetBundle时,只要指定对应AssetBundle的路径即可加载对应的资源。规则如下:
本地加载:本地加载需要使用前缀”file://”以表示他是一个本地文件。Eg.
路径设置"file://" + Application.dataPath + "/"
BaseDownloadingURL = "file://E:/Neo/AssetBundle/Assets/Android/" 资源下载路径
AssetBundleName = "Android" 资源包名
URL = "file://E:/Neo/AssetBundle/Assets/Android/Android" 整个资源的路径
在放置本地资源目录的时候只要放置成BaseDownloadingURL即可
网络加载:网络加载使用http://的具体路径进行加载。Eg.
路径设置"http://www.MyWebsite/MyAssetBundles/"
BaseDownloadingURL = "http://www.MyWebsite/MyAssetBundles/Android/" 资源下载路径
AssetBundleName = "Android" 资源包名
URL = "http://www.MyWebsite/MyAssetBundles/Android/Android" 整个资源的路径
在配置服务器目录的时候只要配置成BaseDownloadingURL即可
1.3 使用方法
1)设置AssetBundleURL
AssetBundleManager.SetSourceAssetBundleURL("http://www.MyWebsite/MyAssetBundles/");
2)初始化AssetBundleManager
var request = AssetBundleManager.Initialize();
if (request != null)
yield return StartCoroutine(request);
3)异步加载资源
AssetBundleLoadAssetOperation request = AssetBundleManager.LoadAssetAsync(
assetBundleName, assetName, typeof(GameObject) );
if (request == null)
yield break;
yield return StartCoroutine(request);
GameObject prefab = request.GetAsset<GameObject> ();
4)异步加载关卡
AssetBundleLoadOperation request = AssetBundleManager.LoadLevelAsync(
sceneAssetBundle, levelName, isAdditive);
if (request == null)
yield break;
yield return StartCoroutine(request);
1.4 代码解析
BuildAssetBundles
BuildPipeline.BuildAssetBundles Unity3d提供了这样一个方法允许对AssetBundle进行一键打包。其中第一个参数outputPath一般由AssetBundleOutputPath和PlatformName组成。
如果打包的目录不存在是会报错的,所以打包前先检查目录是否存在,如果不存在的话先创建目录。
AssetBundleManager
设置AssetBundle本地目录
SetSourceAssetBundleDirectory(string relativePath)
{
BaseDownloadingURL = GetStreamingAssetsPath() + relativePath;
//下载路径为StreamingAsset的路径加上相对路径
}
设置AssetBundle下载路径
SetSourceAssetBundleURL(string absolutePath)
{
BaseDownloadingURL = absolutePath + Utility.GetPlatformName() + "/";
//下载路径为绝对路径加上平台路径
}
初始化AssetBundleManager
var request = AssetBundleManager.Initialize();
if (request != null)
yield return StartCoroutine(request);
在初始化的时候首先下载Manifest文件
异步加载资源
LoadAssetAsync (string assetBundleName, string assetName, System.Type type)
异步加载关卡
LoadLevelAsync (string assetBundleName, string levelName, bool isAdditive)
继承自IEnumerator
IEnumerator是一个接口
public interface IEnumerator
{
object Current { get; }
bool MoveNext();
void Reset();
}
AssetBundleLoadOperation实现了MoveNext方法,通知StartCoroutine何时终止。
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 ();
}
Update函数会在AssetBundleManager一直调用,直到IsDone达成
2.IIS服务器搭建
2.1安装IIS服务
在启用或关闭Windows功能中可以安装IIS相关的服务
2.2开启IIS与创建网站
在管理工具里有一个IIS管理器,打开后可以添加自己的网站。
2.3几个常见错误
403.14 没有配置目录浏览功能,在IIS管理器中找到目录浏览,然后启用功能
404.3 IIS文件保护,不在IIS指定的MIME类型里的文件不会操作。常见的如mp4/flv/iso/7z/apk等扩展名IIS没有指定MIME类型,这类文件默认在IIS里是不能下载的。只要在MIME类型里添加对应的类型进行支持即可。
3.