自定义AssetBundle包扩展名

引用: https://www.cnblogs.com/huwenya/p/9246232.html

前情提要:第二种打包方式。

自定义AssetBundle包扩展名

在之前的教程中,我们已经多次提到过扩展名了,并且也已经说明了如何设置自定义的AssetBundle扩展名。至于为什么还要把它单独拿出来说一遍,自然是有它的道理的,因为这里面有一个巨大的坑...

注意,前方有坑。。。

 

根据前面的剧情,我们有三方式可以设置自定义的AssetBundle包扩展名,下面就来一一讲解:

 

一、在Inspector面板中设置扩展名

这种设置AssertBundle包扩展名的方式可能是最简单的方式了,这里我把图片再放一遍↓↓

使用这种方式设置扩展名也有坑的地方,据我的尝试,也不是任意的扩展名都可以的,假如通过这种方式设置了扩展名,但是打包以后却没有看到扩展名,那么就换一个扩展名再试试。

 

二、通过AssetBundleName设置扩展名

意思是什么呢?就是我们在给AssetBundle包设置名字的时候,同时加入扩展名。

假如说,我们给AssetBundle包取名字叫做“MyAssetBundle”,那么这个时候,我们把名字换成“MyAssetBundle,assetbundle”,不用再设置扩展名,直接打包,我们会看到打包出来的AssetBundle包带上了扩展名。

其实这是一种讨巧的方式。用这种方式可以设置任何扩展名,都没有问题,而且可以被正确加载。

 

三、通过AssetBundleBuild.assetBundleVariant设置扩展名

兴许在我心里这种方式设置扩展名才是正统,也不知道为什么会有这种奇怪的念头。

我们可以在上一教程的代码基础上加上这样一句话↓↓

 

buildMap.assetBundleVariant = "assetbundle";

然后点击菜单,运行打包程序,虽然最后打包成功了,编辑器会报错,错误信息是这样的↓↓

 

 

  1.  

    Error: Variant folder path cannot be empty

  2.  

     

这是个死活找不出原因的错,明明都打包成功了,哪里报的错??逗我来了吧??

 

 

简直让人崩溃,问度娘,度娘说:我不知道...

哎,无奈之下只好问谷哥了,幸好谷哥给力了一把↓↓

 

 

总算是找到原因了,按照上图的方法添加这几行代码,再次运行打包,就不会再报错了,心好累...

 

 

但是你以为这样就完了??那你就太年轻了...

在添加了上面的代码之后,每次运行后,你设置的信息都会存储到Inspector面板中的这里↓↓还有这里↓↓

 

(用画图打的马赛克,将就着看吧)

 

也不能通过Remove Unused Names把它们删除掉,如果是处女座的话...

 

总结来看,最方便最保险最安全最**的设置AssetBundle后缀名的方式还是第二种方式。

最后非常非常非常感谢这位叫王思元的筒子给出的正解,它的博客里还有很多很多关于AssetBundle包和打包的知识,以及各种报错的解决方案,我只是截取了其中一段,欢迎大家去看看他的博客→→博客链接←←

 

下期见啦~

在Unity中,自定义AssetBundle的依赖是通过AssetBundleManifest来管理的。AssetBundleManifest是一个含了所有AssetBundle的依赖关系的文件。 首先,你需要创建一个AssetBundleBuild结构体来定义你的AssetBundle。在这个结构体中,你可以指定AssetBundle的名称、构建的资源列表以及依赖的AssetBundle。 然后,你可以使用BuildPipeline.BuildAssetBundles方法来构建你的AssetBundle。这个方法会返回一个AssetBundleManifest对象,其中含了所有AssetBundle的依赖关系信息。 接下来,你可以使用AssetBundleManifest对象来获取指定AssetBundle的所有依赖AssetBundle。通过调用GetAllDependencies方法,你可以获取指定AssetBundle所依赖的所有其他AssetBundle的名称。 最后,你可以加载这些依赖的AssetBundle并使用其中的资源。 以下是一个示例代码: ```csharp // 定义一个AssetBundleBuild结构体 AssetBundleBuild build = new AssetBundleBuild(); build.assetBundleName = "myassetbundle"; build.assetNames = new string[] { "Assets/MyResource.prefab" }; build.assetBundleVariant = "variant"; build.addressableNames = new string[] { "MyResource" }; // 构建AssetBundle BuildPipeline.BuildAssetBundles("Assets/AssetBundles", new AssetBundleBuild[] { build }, BuildAssetBundleOptions.None, BuildTarget.StandaloneWindows); // 获取AssetBundleManifest var manifest = BuildPipeline.BuildAssetBundles("Assets/AssetBundles", BuildAssetBundleOptions.None, BuildTarget.StandaloneWindows).manifest; // 获取指定AssetBundle的依赖关系 string[] dependencies = manifest.GetAllDependencies("myassetbundle"); // 加载依赖的AssetBundle foreach (string dependency in dependencies) { AssetBundle.LoadFromFile(Path.Combine(Application.streamingAssetsPath, dependency)); } // 使用资源 GameObject myResource = Instantiate(AssetBundle.LoadFromFile(Path.Combine(Application.streamingAssetsPath, "myassetbundle"))); ``` 这是一个简单的示例,你可以根据你的项目需求进行相应的修改和扩展。希望能帮到你!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值