AssetBundle 如何打包AB包和调用AB包内资源
程序员文章站
2022-07-09 13:02:57
打包设置首先代码打包AB很简单,我们把它放在我们项目工程的根目录下using UnityEditor;using System.IO;public class CreateAssetBundles{ [MenuItem("Tools/BuildAssetBuldels")] static void BuildAllAssetBundles() { //判断有没有这个目录,没有的话就创建一个目录 string dir = "AssesBundles...
打包设置
首先代码打包AB很简单,我们把它放在我们项目工程的根目录下
using UnityEditor;
using System.IO;
public class CreateAssetBundles
{
[MenuItem("Tools/BuildAssetBuldels")]
static void BuildAllAssetBundles()
{
//判断有没有这个目录,没有的话就创建一个目录
string dir = "AssesBundles";
if (Directory.Exists(dir) == false)
{
Directory.CreateDirectory(dir);
}
//打包AB包代码
//BuildAssetBundleOptions.None选择哪种压缩方式None的包体相对较小,第一次解压需花费较长时间
//BuildTarget.StandaloneWindows64这个需要根据需求旋转不同的平台
BuildPipeline.BuildAssetBundles(dir, BuildAssetBundleOptions.None, BuildTarget.StandaloneWindows64);
}
}
在Unity里面,我们需要讲我们要打包的资源进行一些AssetBundle的设置
默认情况下,这里为null,我们直接点击之后选择“New”,新建一个包的种类
示例:公用资源 share,然后想创建一些子目录可以scene\wall
这个后缀可以随意设置,一般都是ab,unity3d之类的
从包中加载资源
从上面设置的根目录加载
void Start(){
//从根目录里面加载ab包,这里需要加后缀
AssetBundle shareAb = AssetBundle.LoadFromFile("AssesBundles/share.unity3d");
AssetBundle ab = AssetBundle.LoadFromFile("AssesBundles/scene/prefab.unity3d");
//把取到的资源生成到我们的场景,这里不需要后缀
GameObject cube = ab.LoadAsset<GameObject>("Cube");
Instantiate(cube);
}
通过WWW加载
IEnumerator Start(){
while (!Caching.ready)
{
yield return null;
}
//本地绝对路径
WWW www = WWW.LoadFromCacheOrDownload(@"file:///E:\WebProgram\AssesBundles\scene\prefab.unity3d", 1);
//服务器
//WWW www = WWW.LoadFromCacheOrDownload(@"http://192.168.0.191/AssesBundles/scene/prefab.unity3d", 1);
yield return www;
if (!string.IsNullOrEmpty(www.error))
{
Debug.Log(www.error);
yield break;
}
var ab = www.assetBundle;
}
使用官方推荐的加载方式
IEnumerator Start(){
//通过UnityEngine.Networking.UnityWebRequest
//string uri = @"file:///E:\WebProgram\AssesBundles\scene\prefab.unity3d ";
string uri = @"http://192.168.0.191/AssesBundles/scene/prefab.unity3d";
var request = UnityWebRequest.GetAssetBundle(uri);
yield return request.SendWebRequest();
//var ab = DownloadHandlerAssetBundle.GetContent(request);
var ab = (request.downloadHandler as DownloadHandlerAssetBundle).assetBundle;
//把加载到的prefab资源都生成
var objs = ab.LoadAllAssets();
foreach (var item in objs)
{
Instantiate(item);
}
}
本文地址:https://blog.csdn.net/Liu_ChangC/article/details/107318904