Unity编辑器右键菜单实现多平台游戏资源打包—AssetBundle的构建

news2024/9/27 12:13:46

文章目录

      • 👉一、初识AssetBundle
      • 👉二、创建AssetBundle
      • 👉三、动手操作:实现右键菜单打包AssetBundle

👉一、初识AssetBundle

AssetBundle是Unity提供的一种打包资源的文件格式,比如模型、纹理和音频文件等的各种资源,允许使用WWW类流式传输从本地或远程位置来加载资源,从而提供项目的灵活性,减少初始应用程序的大小。

👉二、创建AssetBundle

在本博客,仅介绍单个预制体打包Bundle的方法。Unity为我们提供的唯一的API来打包AssetBundle。即:

BuildPipeline.BuildAssetBundles(string outputPath, AssetBundleBuild[] builds, BuildAssetBundleOptions assetBundleOptions, BuildTarget targetPlatform);

说明:

  • outputPath:AssetBundle的输出路径,资源会被编译保存到该路径下,注意编译的时候不会自动创建文件夹。
  • builds:AssetBundle构建的映射,可以是单个资源,也可以是多个资源一起打包。
  • assetBundleOptions:资源包构建选项,默认为None。
  • targetPlatform:目标构建平台。

👉三、动手操作:实现右键菜单打包AssetBundle

这里将以PC、Android、WebGL为例,添加编辑器右键菜单创建AssetBundle过程进行演示。

  1. 打开一个Unity工程项目,将场景中的物体拖入Asset文件夹下作为预制体。
    在这里插入图片描述

  2. 创建右键菜单脚本打包Bundle
    在这里插入图片描述
    脚本引入命名空间:using UnityEditor;放在Editor文件夹下,脚本核心代码如下:

using UnityEngine;
using UnityEditor;

public class BuildAssetBundle
{
    [MenuItem("Assets/打包Bundle/PC端")]
    private static void BuildWindows()
    {
        BuildBundle(BuildAssetBundleOptions.None, BuildTarget.StandaloneWindows);
    }

    [MenuItem("Assets/打包Bundle/安卓端")]
    private static void BuildAndroid()
    {
        BuildBundle(BuildAssetBundleOptions.None, BuildTarget.Android);
    }

    [MenuItem("Assets/打包Bundle/Web端")]
    private static void BuildWebGL()
    {
        BuildBundle(BuildAssetBundleOptions.ChunkBasedCompression, BuildTarget.WebGL);
    }
    
    private static void BuildBundle(BuildAssetBundleOptions options,BuildTarget target)
    {
        GameObject obj = Selection.activeGameObject;
        if(obj != null)
        {
            if (PrefabUtility.IsPartOfPrefabAsset(obj))
            {
                string buildPath = EditorUtility.SaveFilePanel("请选择Bundle保存的路径","", obj.name , "bundle");
                
                string buildDir =System.IO.Path.Combine(System.IO.Path.GetDirectoryName(buildPath), target.ToString());//合并路径
                if (!System.IO.Directory.Exists(buildDir))
                {
                    System.IO.Directory.CreateDirectory(buildDir);//创建目标平台的指定bundle路径
                }
                Debug.Log(buildDir);
                AssetBundleBuild[] builds = new AssetBundleBuild[1];
                builds[0].assetBundleName = obj.name + ".bundle";//后缀名可自定义
                string[] assetNames = new string[1];
                assetNames[0] = AssetDatabase.GetAssetPath(obj);
                builds[0].assetNames = assetNames;
                BuildPipeline.BuildAssetBundles(buildDir, builds, options, target);//开始打包
                AssetDatabase.Refresh();//刷新
            }
            else
            {
                Debug.LogError("请选择预制体进行打包!");
            }
        }
    }
}
  1. 右键菜单打包演示
    选择预制体——点击鼠标右键——选择打包Bundle选项——选择目标平台——选择输出文件夹——开始打包。
    在这里插入图片描述
    在这里插入图片描述

  2. 成功打包资源
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    可以看到每个平台的Bundle还是不太一样,这也跟设置的Bundle构建选项有关。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/170318.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

大数据导论

数据是什么数据是指对客观事件进行记录并可以鉴别的符号,是对客观事物的性质、状态以及相互关系等进行记载的物理符号或这些物理符号的组合,它是可识别的、抽象的符号。它不仅指狭义上的数字,还可以是具有一定意义的文字、字母、数字符号的组…

python学习 --- 元组基础

目录 一、什么是元组 1、不可变序列和可变序列 2、元组 二、 元组的创建方式 1、小括号(可省略) 2、内置函数tuple() 三、元组的获取与遍历 1、元组的获取 2、元组的遍历 一、什么是元组 1、不可变序列和可变序列 不可变序列:没有增…

使用streamlit记录

官方网址:https://docs.streamlit.io/ 官方网址:https://discuss.streamlit.io/t/streamlit-components-community-tracker/4634 官方网址:https://github.com/streamlit/streamlit 第三方插件网址:https://github.com/arnaudmiri…

Solidity 中的数学(第 2 部分:溢出)

本文是关于在 Solidity 中进行数学运算的系列文章中的第二篇。这次的主题是:溢出。 介绍 每次我看到、*或**审计另一个 Solidity 智能合约时,我都会开始写以下评论:“这里可能会溢出”。我需要几秒钟来写这四个字,在这几秒钟内&a…

【Pandas】18 小练习

#【Pandas】18 小练习 2023.1.16 两个pandas小练习 18.1 疫情数据分析 18.1.1 观察数据 import pandas as pd import osdf pd.read_csv("data/covid19_day_wise.csv") dfDateConfirmedDeathsRecoveredActiveNew casesNew deathsNew recoveredDeaths / 100 CasesR…

日常渗透刷洞的一些小工具

SecurityServiceBox:一个Windows平台下既可以满足安服仔日常渗透工作也可以批量刷洞的工具盒子 0x00 更新题外话—终端选取 在盒子的tools当中,很多工具运行都是带有颜色标识的,例如nuclei, vulmap,原生的cmd终端虽然…

MD5有哪些特性,常用的MD5加密真的安全吗

在密码学中,MD5是比较常用的算法之一。大家都知道MD5曾一度被认为十分安全,并且在国内外得到广泛适用。然而,王小云教授的研究证明利用MD5算法的磕碰能够严重威胁信息体系安全,因此引发了密码学界的轩然大波。那么,关于…

为什么JDK中String类的indexof不使用KMP或者Boyer-Moore等时间复杂度低的算法编辑器

indexOf底层使用的方法是典型的BF算法。 1、KMP算法 由来 外国人: Knuth,Morris和Pratt发明了这个算法,然后取它三个的首字母进行了命名。所以叫做KMP。 KMP真的很难理解,建议多看几遍 B站代码随想录,文章也的再好 …

【蓝桥杯备赛系列 | 真题 | 简单题】2014年第五届真题-分糖果

🤵‍♂️ 个人主页: 计算机魔术师 👨‍💻 作者简介:CSDN内容合伙人,全栈领域优质创作者。 蓝桥杯竞赛专栏 | 简单题系列 (一) 作者: 计算机魔术师 版本: 1.0 &#xff08…

【博客597】iptables如何借助连续内存块通过xt_table结构管理流量规则

iptables如何借助连续内存块通过xt_table结构管理流量规则 1、iptables 分为两部分: 用户空间的 iptables 命令向用户提供访问内核 iptables 模块的管理界面。内核空间的 iptables 模块在内存中维护规则表,实现表的创建及注册。 2、iptables如何管理众…

第十二章 数据库设计

前言 本文章为看视频所写。 视频链接:168. 14.1 数据库设计前言_哔哩哔哩_bilibili 目录 前言 章节提要 一、数据库设计过程 二、E-R模型 三、答题技巧 四、案例分析 1、案例1 二、案例2 章节提要 一、数据库设计过程 ER模型:是实体联系模型&#x…

第一章 数据结构绪论

数据结构:是相互之间存在一种或多种特定关系的数据元素的集合。数据结构是一门研究非数值计算的程序设计问题中的操作对象,以及它们之间关系和操作等相关问题的学科。程序设计数据结构算法数据:是描述客观事物的符号,是计算机中可…

2.2、进程的状态与转换

整体框架 1、三种基本状态 进程是程序的一次执行。在这个执行过程中,有时进程正在被 CPU 处理,有时又需要等待 CPU 服务, 可见进程的状态是会有各种变化。 为了方便对各个进程的管理,操作系统需要将进程合理地划分为几种状态 ①…

随机梯度下降法的数学基础

梯度是微积分中的基本概念,也是机器学习解优化问题经常使用的数学工具(梯度下降算法)。因此,有必要从头理解梯度的来源和意义。本文从导数开始讲起,讲述了导数、偏导数、方向导数和梯度的定义、意义和数学公式&#xf…

SpringBoot-自动配置-切换内置web服务器

SpringBoot-自动配置-切换内置web服务器 介绍 SpringBoot的web环境中默认使用tomcat作为内置服务器其实SpringBoot提供了4种内置服务器供我们选择分别为:Jetty,Netty,Tomcat,Undertow我们可以很方便的进行切换 实例演示 在pom文件…

简单了解操作系统、进程内存管理

目录 前言: 一、操作系统: 操作系统的定位: 应用程序: 系统调用: 操作系统内核: 驱动程序: 硬件设备: 二、进程: 什么是进程? 进程的描述与组…

自定义类型,结构体、枚举、联合(C语言)

目录 结构体 结构体的基础知识: 结构体的声明: 特殊声明: 结构体的自引用 结构体变量的定义和初始化 结构体内存对齐: 修改默认对齐数: 结构体传参 结构体的柔型数组 柔型数组的书写 柔性数组的特点 柔性数组的使用 柔…

【Java寒假打卡】JavaWeb-Tomcat

【Java寒假打卡】JavaWeb-Tomcat服务器Tomcat下载和安装Tomcat的目录结构基本使用控制台乱码的问题IDEA集成TomcatJavaWeb项目的目录结构Tomcat-idea发布项目Tomcat-WAR包发布项目Tomcat配置文件的介绍Tomcat配置虚拟目录Tomcat配置虚拟主机服务器 Tomcat下载和安装 将下载好的…

干货 | 数据安全和个人信息保护审计的方法研究

以下内容整理自清华大学《数智安全与标准化》课程大作业期末报告同学的汇报内容。第一部分:概述我们的研究核心是个人信息保护合规审计,具体指个人信息处理活动是否遵守我国相关法律法规的监督性审计。在个保法出台后,我国形成了以内部审计为…

我用ChatGPT写神经网络:一字不改,结果竟很好用

自从去年底推出以来,对话式 AI 模型 ChatGPT 火遍了整个社区。 ChatGPT 的确是一个了不起的工具,就像一个「潘多拉魔盒」。一旦找到正确的打开方式,你或许会发现,自己再也离不开它了。 作为一个全能选手,人们给 Chat…