unity 打AB包中遇到的坑以及一些心得
unity踩坑之旅
提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
依旧很突然,昨晚临睡前突然收到老板的要求:把指定的美术资源打个AB包。本来想着这不小菜一碟,结果今天差点没把我噎到,特此记录
一、AB包是什么,基础引入?
unity官方写得很好,我就不班门弄斧了。如果太难懂的话,也可以上论坛看看各位大佬的见解,这里就不赘述了。
unity的打AB包教程
二、AB包怎么操作,我的见解?
1.自己写编辑器脚本 (简单快捷)
步骤就在里面的4-8点
unity的打AB包教程
在Editor文件夹创建一个脚本,用于创建AB包
using System.Collections;
using System.Collections.Generic;
using UnityEditor;
using System.IO;
public class bundle
{
[MenuItem("AssetsBundle/Build AssetBundles")]
static void BuildAllAssetBundles()//进行打包
{
string dir = "AssetBundles";
//判断该目录是否存在
if (Directory.Exists(dir) == false)
{
Directory.CreateDirectory(dir);
}
//参数一为打包到哪个路径,参数二压缩选项 参数三 平台的目标
BuildPipeline.BuildAssetBundles(dir, BuildAssetBundleOptions.None, BuildTarget.Android);
}
}
下面这个是加载AB包GameObject到场景,在非Editor文件夹即可
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.IO;
public class BundledObj : MonoBehaviour
{
public string astName = "hello";
public string ziyuan = "GameObject";
// Start is called before the first frame update
void Start()
{
AssetBundle loc = AssetBundle.LoadFromFile(Path.Combine(Application.streamingAssetsPath, astName));
GameObject a = loc.LoadAsset<GameObject>(ziyuan);
Instantiate(a);
loc.Unload(false);
}
}
2.使用asset bundle browser (unity2020开始需要从github下载)
com.unity.assetbundlebrowser
3.使用addressable (最新、可寻址,据说unity在这个插件上下了大功夫,包含了发布AB包到服务器,以及如何像本地一样使用远程包)
三、AB包的一些坑,我的解决?
坑记录:(以下坑是使用上述方法1和方法2遇到)
1.打AB包坑之一:打包、加载包的unity版本需要相同,否则读取时会报错
unity Unable to read header from archive file:
补充:这个错误是在使用unity2020.3.20f1c1打包,用2020.3.8f1c1加载报错;但是使用unity2019.4.4f1打包,2020.3.8f1c1加载又正常。所以结论修改为——unity2020以上请使用相同版本打包与加载
20221111-2310再次补充:使用unity2020.3.20f1c1打包,用2020.3.8f1c1加载,发现没有报错。。。。。。。然而上午的时候疯狂报错,只能说人品不好,吃完饭回来什么都解决了。。
2.变成粉色
有不生效的shader应该怎么办?添加到里面也没用,需要加载方也要有shader才行;试过打包shader也没用
3.另外,standard的transparent不起作用?打包前看还正常,打包后没有透明效果了;也是目前无解
总结
提示:这里对文章进行总结:
AB包的研究还要继续,有时间再继续补充,欢迎各位朋友评论