Unity资源预加载、打AB包、热更新、C#

看到这篇文章的小伙伴,建议先去阅读一下官方手册:

https://docs.unity3d.com/2017.4/Documentation/Manual/AssetBundles-Workflow.html

内容非常详细,易懂。小编今天只是个人总结一下,希望能帮助到小伙伴们(ˉ▽ ̄~)

一、简介

我们在开发游戏的时候,经常提及到热更新,那么热更新是什么呢,官方解释来一波(ˉ▽ ̄~)

  • 热更新是一种各大手游等众多App常用的更新方式。简单来说,就是在用户通下载安装APP之后,打开App时遇到的即时更新

是不是简单明了,那么热更新主要更新什么呢,1.代码 2.资源

今天小编来研究一下资源更新 O(∩_∩)O 以下内容仅是个人总结的简单的方法,后期如果出现Bug 可以给小编留言哦(ˉ▽ ̄~) 目前测试木问题的啦~

二、内容

1.编辑器设置如下图:
  • 点击预制体之后,编辑器右下角会有这个设置,自行命名(New一个)只给你需要更新的资源预制体修改即可~ 支持多选修改,小编建议把与预制体相关的依赖文件也一起打包。否则可能会出现丢包的现象。
  • 小编起的名字是 all
    在这里插入图片描述
  • 然后 新建一个Editor文件夹

-[在这里插入图片描述](https://img-blog.csdnimg.cn/20200401112720738.png)

2.代码环节

官方代码如下

using UnityEditor;
using System.IO;

public class CreateAssetBundles
{
    [MenuItem("Assets/Build AssetBundles")]
    static void BuildAllAssetBundles()
    {
        string assetBundleDirectory = "Assets/AssetBundles";
        if(!Directory.Exists(assetBundleDirectory))
        {
            Directory.CreateDirectory(assetBundleDirectory);
        }
        BuildPipeline.BuildAssetBundles(assetBundleDirectory, 
                                        BuildAssetBundleOptions.None, 
                                        BuildTarget.StandaloneWindows);
    }
}

官方代码是可以直接用的,下面我要说的是个人总结的一些功能,方便大家根据项目需求来进行打包。

  • API说明BuildPipeline.BuildAssetBundles(assetBundleDirectory, BuildAssetBundleOptions.None, BuildTarget.StandaloneWindows);
    参数分别为:地址,压缩方式和压缩指定的平台,不同的平台有不同的显示。

下面是其他几种加载方式:

  • 第一种: 体积小,加载慢的方式
 [MenuItem("Assets/Build AssetBundles(体积小,加载慢)")]
    private static void BuildABsToWin64_LZMA()
    {
        //在Assets下设定一个文件价用于存储ab资源
        string path = Application.dataPath + "/AssetBundles";
        //path 路径  可以将需要打包的资源放到Resources文件夹中也很方便
        if(!Directory.Exists(path))
        {
            Directory.CreateDirectory(path);
        }
        //打包ab资源
        BuildPipeline.BuildAssetBundles(path, BuildAssetBundleOptions.None, BuildTarget.StandaloneWindows64);
        Debug.Log("AssetBundle资源打包完成");
    }
  • 第二种:体积大,加载快的方式
[MenuItem("Assets/Build AssetBundles不压缩(体积大,加载快)")]
    private static void BuildABsToWin64_UnComper()
    {
        //在assets下设定一个文件价用于存储ab资源
        string path = Application.dataPath + "/AssetBundles";
         if(!Directory.Exists(path))
        {
            Directory.CreateDirectory(path);
        }
        //打包ab资源
        BuildPipeline.BuildAssetBundles(path, BuildAssetBundleOptions.UncompressedAssetBundle, BuildTarget.StandaloneWindows64);
        Debug.Log("AssetBundle资源打包完成");
    }
  • 第三种:体积中等,加载中等的方式
[MenuItem("Assets/Build AssetBundles(体积中,加载中)")]
    private static void BuildABsToWin64_LZ4()
    {
        //在assets下设定一个文件价用于存储ab资源
        string path = Application.dataPath + "/AssetBundles";
         if(!Directory.Exists(path))
        {
            Directory.CreateDirectory(path);
        }
        //打包ab资源
        BuildPipeline.BuildAssetBundles(path, BuildAssetBundleOptions.ChunkBasedCompression, BuildTarget.StandaloneWindows64);
        Debug.Log("AssetBundle资源打包完成");
    }
  • 根据需求选择一种打包方式之后,编辑器Assets下面会出现BuildAssetBundles选项,根据你选择的一种打包方式来进行打包,进度条加载完毕后,如果没有出现AssetBundles文件夹,记得Refresh刷新一下就可以了,打包成功(ˉ▽ ̄~)

在这里插入图片描述
在这里插入图片描述

- 打包成功之后的效果如下:

在这里插入图片描述

3.加载资源环节
  • 打包完之后,如果是要在Awake中加载,那么运行程序后,资源就会开始自动加载。根据个人需要,放在加载场景之前还是程序运行时都可以的。

  • 说明一下,小编这里用的是WWW加载方式,根据个人习惯吧。

  • 除此之外还有,使用LoadFormFile加载 / 异步加载、使用LoadFromMemoryAsync加载 、使用LoadFromCacheOrDownload加载、使用UnityWebRequest加载 等等~~搜索引擎上输入会给你答案,,非常详细,今天主要是整体功能的实现,小编个人实践觉得WWW加载就很不错。

  • 附上代码:

   private WWW Loadab;
   private void Awake()
    {     
        StartCoroutine("loadWWW");
    }
    IEnumerator loadWWW()
    {
        Loadab = new WWW(Application.dataPath + "/AssetBundles/all");  
        yield return Loadab;    
        GameObject go = Instantiate(Loadab.assetBundle.LoadAsset<GameObject>("名字")) ;
        //设置生成物体的位置就可以看到了
        go.transform.SetParent();
    }
  • 到这里就加载完毕了,给耐心看完的小伙伴点个赞(ˉ▽ ̄~)

三、总结

总的来说,无论是打包还是加载资源包,方法很多,找到适合自己的方法就可以,功能都能实现,如果项目有硬性需求,就需要合理选择方法。

欢迎留言转载,后期会更新加载依赖项,以及其他一些功能的完善~~谢谢~(ˉ▽ ̄~)

  • 2
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值