Unity AssetBundle 之 (进阶)简单的实现 一键删除打包好的 AssetBundle 包资源 的方法

 

 

Unity AssetBundle 之 (进阶)简单的实现 一键删除打包好的 AssetBundle 包资源 的方法

 

目录

Unity AssetBundle 之 (进阶)简单的实现 一键删除打包好的 AssetBundle 包资源 的方法

一、简单介绍

二、实现原理

三、注意事项

四、效果预览

五、实现步骤

六、关键代码


 

一、简单介绍

Unity中的一些基础知识点。

本节介绍,Asset Bundle 在 Unity中的使用,进阶第四篇,可能需要重新打 Asset Bundle 包,所有需要删除之前打的 AssetBundle 包的方法,有不对的地方欢迎指正。

 

二、实现原理

1、使用 Directory.Delete() 删除打包的文件夹, File.Delete() 删除对应的.meta 文件

 

三、注意事项

1、AssetDatabase.Refresh() 刷新文件夹,不然可能看不到效果

 

四、效果预览

 

五、实现步骤

1、打开Unity ,新建一个空工程

 

2、把资源导进来,这里 AssetBundle 标记标签的文件夹为 AB_Resources,文件结构如下,需要标记的资源如图功能文件夹放置

 

3、新建脚本 DeleteAssetBundle,用来删除以打包的Asset Bundle资源,PathTools 一些 AB 路径的管理脚本

 

4、菜单栏就会有 AssetBundleTools -- DeleteAllAssetBundles 工具了

 

5、删除打包好的Asset Bundle资源,前提是要有已经打包好的AB包

可参看以下博客进行 Asset Bundle 一键打包

Unity AssetBundle 之 (进阶)简单的实现不同平台给 AB 标签的资源打包 Asset Bundle 包(分平台)的方法

 

6、点击 DeleteAllAssetBundles 就可以一键删除了

 

六、关键代码

1、DeleteAssetBundle

/****************************************************
文件:DeleteAssetBundle.cs
作者:Administrator
邮箱:https://blog.csdn.net/u014361280 
日期:2020/08/14 19:10:45
功能:Nothing
*****************************************************/

using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEditor;
using UnityEngine;

namespace ABFw
{


    public class DeleteAssetBundle 
    {
        [MenuItem("AssetBundleTools/DeleteAllAssetBundles")]
        public static void DelAssetBundle() {

            // 删除AB包输出目录
            string strNeedDeleteDir = string.Empty;

            strNeedDeleteDir = PathTools.GetABOutPath();
            if (string.IsNullOrEmpty(strNeedDeleteDir) == false)
            {
                // 注意 :这里参数 true 表示可以删除非空目录
                Directory.Delete(strNeedDeleteDir,true);

                // 同时删除 meta 文件(去除不必要的警告)
                File.Delete(strNeedDeleteDir + ".meta");

                // 刷新目录
                AssetDatabase.Refresh();
            }

        }
    }//class_End
}

 

2、PathTools

/****************************************************
文件:PathTools.cs
作者:仙魁XAN
邮箱:https://blog.csdn.net/u014361280 
日期:2020/08/14 17:11:52
功能:AB框架的 路径工具类
    1、路径常量
    2、路径方法
*****************************************************/

using System.Collections;
using System.Collections.Generic;
using UnityEditor;
using UnityEngine;

namespace ABFw
{

    public class PathTools
    {
        /* 路径常量 */
        public const string AB_RESOURCES = "AB_Resources";  // 打包AB包根路径

        /* 路径方法 */

        /// <summary>
        /// 得到 AB 资源的输入目录
        /// </summary>
        /// <returns></returns>
        public static string GetABResourcesPath()
        {
            return Application.dataPath + "/" + AB_RESOURCES;
        }

        /// <summary>
        /// 获得 AB 包输出路径
        ///     1\ 平台(PC/移动端等)路径
        ///     2\ 平台名称
        /// </summary>
        /// <returns></returns>
        public static string GetABOutPath()
        {
            return GetPlatformPath() + "/" + GetPlatformName();
        }

        /// <summary>
        /// 获得平台路径
        /// </summary>
        /// <returns></returns>
        private static string GetPlatformPath()
        {

            string strReturenPlatformPath = string.Empty;

#if UNITY_STANDALONE_WIN
            strReturenPlatformPath = Application.streamingAssetsPath;

#elif UNITY_IPHONE
                
            strReturenPlatformPath = Application.persistentDataPath;
#elif UNITY_ANDROID

            strReturenPlatformPath = Application.persistentDataPath;
#endif

           return strReturenPlatformPath;
        }

        /// <summary>
        /// 获得平台名称
        /// </summary>
        /// <returns></returns>
        public static string GetPlatformName()
        {
            string strReturenPlatformName = string.Empty;

#if UNITY_STANDALONE_WIN
            strReturenPlatformName = "Windows";

#elif UNITY_IPHONE
                
            strReturenPlatformName = "IPhone";
#elif UNITY_ANDROID

            strReturenPlatformName = "Android";
#endif


            return strReturenPlatformName;
        }

        /// <summary>
        /// 返回 WWW 下载 AB 包加载路径
        /// </summary>
        /// <returns></returns>
        public static string GetWWWAssetBundlePath()
        {
            string strReturnWWWPath = string.Empty;

#if UNITY_STANDALONE_WIN
            strReturnWWWPath = "file://" + GetABOutPath();

#elif UNITY_IPHONE
                
            strReturnWWWPath = GetABOutPath() + "/Raw/";
#elif UNITY_ANDROID

            strReturnWWWPath = "jar:file://" + GetABOutPath();
#endif
                        
            return strReturnWWWPath;
        }

    }//Class_End
}

 

 

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: Unity AssetBundleUnity 引擎中一种用于打包和管理资源的机制。通过使用 AssetBundle,我们可以将资源打包成一个个独立的,然后在运行时根据需要动态加载和卸载这些资源,从而实现游戏资产的按需加载,节省内存和加载时间。 进阶实现 AssetBundle 框架括以下步骤: 1. 资源分类与打包:根据游戏的需求,将资源按照类型进行分类,并使用 Unity打包工具将资源打包成 AssetBundle。 2. 资源加载与管理:在游戏运行时,通过 AssetBundle 的加载接口加载需要的资源,可以使用 WWW 或 UnityWebRequest 进行加载,并使用 AssetBundleManifest 来管理加载的 AssetBundle。 3. 资源缓存与卸载:加载并使用资源后,可以将资源缓存在内存中,以便后续快速访问。当资源不再需要时,可以使用 Unload 方法释放资源,以节省内存。 4. 异步加载与加载进度:为了防止资源加载阻塞游戏主线程,可以使用异步加载的方式加载资源,并通过回调函数获取加载进度信息,以便显示加载界面或进度条。 5. 资源更新与热更:在游戏发布后,如果需要更新或替换某些资源,可以使用 AssetBundle 的版本控制机制,根据服务器资源版本信息判断是否需要更新,并进行资源差异化下载和替换。 6. 跨平台适配:Unity AssetBundle 可以在不同平台(如 Windows、iOS、Android)上使用相同的打包和加载方式,因此可以方便地实现跨平台适配。 通过以上步骤,我们可以实现一个简单的 AssetBundle 框架,实现资源的按需加载、缓存、卸载、异步加载和更新等功能。这样可以大幅减少游戏的内存占用和加载时间,提高游戏性能和用户体验。 ### 回答2: Unity assetbundleUnity引擎中用于打包和加载资源的一种方式。在进阶简单实现assetbundle框架中,我们需要完成以下几个步骤: 1.资源打包:首先,我们需要将需要打包资源准备好,括场景、模型、纹理、音效等。然后,使用Unity的AssetBundle API对这些资源进行打包。这一步的关键是给资源设置正确的AssetBundleName和Variant。 2.资源加载:在游戏运行时,我们可以通过AssetBundleManager来加载和管理assetbundle资源。AssetBundleManager是一个自定义的管理器类,使用字典来存储已加载的assetbundle,以便快速获取。 3.动态加载:使用AssetBundleManager加载资源后,可以通过AssetBundleManager提供的接口来实例化、替换、销毁已加载的资源。在需要使用资源的地方,使用Instantiate方法来实例化预制体,或者直接使用LoadAsset方法来加载非预制体资源。加载完成后,可以使用UnityEngine.Object类型来获取具体的资源。 4.资源卸载:当资源不再需要使用时,可以调用AssetBundleManager提供的接口来卸载资源。这样,可以释放内存并减少资源的加载数量。需要注意的是,在卸载资源时,需要考虑其他依赖资源的情况,避免出现因卸载资源而导致其他资源无法使用的问题。 5.异常处理:在加载资源的过程中,可能会出现一些异常情况,例如资源不存在、加载失败等。我们需要在框架中做好异常处理的逻辑,在这些情况下给出合适的提示信息,并采取相应的措施,以保证游戏的正常运行。 综上所述,一个简单的assetbundle框架的实现资源打包、加载、动态加载、资源卸载以及异常处理等步骤。这样的实现可以提高游戏的性能和加载速度,减少内存占用,并且便于资源的管理和更新。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

仙魁XAN

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值