Unity3d动态数据管理(1)Export AssetBundles

2024-08-20 16:18

本文主要是介绍Unity3d动态数据管理(1)Export AssetBundles,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

我们在使用unity3d制作大型场景的时候,往往需要加载大容量的数据文件,特别是对于三维数据而言,模型、材质、贴图、特效等资源都是组成项目不可或缺的一部分。数据体量越大,数据加载就越明显。对于良好的人机交互体验而言,让用户处于长时间的等待,是一种非常差的体验感,很多用户很可能就是因为没有耐心等待,就直接关闭你的应用,离开。

所以,做任何的项目之前,必须要先解决场景数据管理的问题。针对Unity3D而言,该引擎提供了一种称为AssetBundles的外部整合数据,可以让我们把编辑器中的物件分门别类的输出,这种方法是目前为止最好的管理unity3D的方法,如果还有好的,请大家多多推荐。
这种称为AssetBundles的东西,其实是一种文件格式unity3d,它能在需要的时候重新被加载到场景中,而这种文件格式可以是模型、贴图、声音,甚至是场景文件。虽然看上去,输出这种类型的文件对于整个场景资源是一种浪费,但其简便的使用方法,不失为一种有效地入门手段。
项目组在开发阶段,AssetBundles数据资源通过unity3D编辑器被分别输出出来,这部分是本文的重点。然后通过一些外部的上传方法,存储到服务器中,这部分unity3D本身并没有提供,可以使用的方法很多,比如FTP、ASP结合数据库等。



上图表示项目开发阶段,开发者通过AsserBundles来建立数据文件,并上传到服务器的工作流程。

项目运行阶段,用户首先通过局域网、互联网来下载数据资源AssetBundles,一旦下载完毕后,就可以对数据资源进行加载等一系列操作。



上图表示项目运行阶段,使用者通过AssetBundles,实现数据资源动态加载、管理的目的。

下面演示创建AssetBundles的过程和方法:

在AssetBundles中,共有三种方法来创建数据资源。
BuildPipeline.BuildAssetBundle, 可以创建任意类型的的资源包,这是一个压缩好的,包含所有预置物(prefabs)、贴图、模型和动画信息的unity3d文件。
BuildPipeline.BuildStreamedSceneAssetBundle,用来创建数据流文件,是数据远程加载的方法,利用这种方法建立的数据文件,通常是一个单一的unity3d文件。使用WWW类来进行传输,加载完毕后使用WWW.LoadFromCacheOrDownload来加载下载好的场景文件。
BuildPipeline.BuildAssetBundleExplicitAssetNames,这种方法同BuildPipeline.BuildAssetBundle类似,但是提供额外的参数来指定每个物体的自定义的字符串(名字)。
实例如下:
现在unity3d的帮助文档BuildPipeline.BuildAssetBundle中,复制以下C#代码。
// C# Example
// Builds an asset bundle from the selected objects in the project view.
// Once compiled go to "Menu" -> "Assets" and select one of the choices
// to build the Asset Bundle

using UnityEngine;
using UnityEditor;

public class ExportAssetBundles {
[MenuItem("Assets/Build AssetBundle From Selection - Track dependencies")]
static void ExportResource () {
// Bring up save panel
string path = EditorUtility.SaveFilePanel ("Save Resource", "", "New Resource", "unity3d");
if (path.Length != 0) {
// Build the resource file from the active selection.
Object[] selection = Selection.GetFiltered(typeof(Object), SelectionMode.DeepAssets);
BuildPipeline.BuildAssetBundle(Selection.activeObject, selection, path, BuildAssetBundleOptions.CollectDependencies | BuildAssetBundleOptions.CompleteAssets);
Selection.objects = selection;
}
}
[MenuItem("Assets/Build AssetBundle From Selection - No dependency tracking")]
static void ExportResourceNoTrack () {
// Bring up save panel
string path = EditorUtility.SaveFilePanel ("Save Resource", "", "New Resource", "unity3d");
if (path.Length != 0) {
// Build the resource file from the active selection.
BuildPipeline.BuildAssetBundle(Selection.activeObject, Selection.objects, path);
}
}
}
以上为代码部分
在unity3d编辑器中,新建C# script,取名为ExportAssetBundles,该脚本必须存储在unity3d项目(Project)面板的Editor目录下。
这时候,在菜单Assets中,我们会发现多了两项新的菜单列表。
Build AssetBundle From Selection - Track dependencies,顾名思义,它能通过当前选中的物体创建AssetBundles数据资源,并且该数据资源包含所有的关联物体。比如,子物体和其他组件(components)。
Build AssetBundle From Selection - No dependency tracking,很明显,这种方法同上面是相对应的,它不包含关联物体,而仅仅输出选中物体本身。
在这个例子中,我们在编辑器中创建一个cube,通过菜单GameObject - Create Other - Cube,在层级视图(Hierachy View)中,会创建了一个新的cube物体,把他拖动到项目视图(Project View)中,称为预置物(Prefabs)。在项目视图中,鼠标右键点击cube,选择Build AssetBundle From Selection - Track dependencies,生成数据资源,并把它存储到项目的AssetBundles目录中。
生成完毕的Cube.unity3d文件,可以根据项目的要求,存储到磁盘的任何位置,或者上传到服务器。
这种手动存储的方法,在项目建立之初能快速的帮助项目建立原型,但随着资源文件的壮大,通过手动来输出明显是不可能的。比较有效的方法,就是写一个函数,来自动创建项目中所有的AssetBundles,同时用一个text文本来标示项目中要创建数据资源的列表清单。


原文链接:http://www.3fun.net/blog/post/437.html

这篇关于Unity3d动态数据管理(1)Export AssetBundles的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1090561

相关文章

在macOS上安装jenv管理JDK版本的详细步骤

《在macOS上安装jenv管理JDK版本的详细步骤》jEnv是一个命令行工具,正如它的官网所宣称的那样,它是来让你忘记怎么配置JAVA_HOME环境变量的神队友,:本文主要介绍在macOS上安装... 目录前言安装 jenv添加 JDK 版本到 jenv切换 JDK 版本总结前言China编程在开发 Java

Spring Boot Actuator应用监控与管理的详细步骤

《SpringBootActuator应用监控与管理的详细步骤》SpringBootActuator是SpringBoot的监控工具,提供健康检查、性能指标、日志管理等核心功能,支持自定义和扩展端... 目录一、 Spring Boot Actuator 概述二、 集成 Spring Boot Actuat

MySQL多实例管理如何在一台主机上运行多个mysql

《MySQL多实例管理如何在一台主机上运行多个mysql》文章详解了在Linux主机上通过二进制方式安装MySQL多实例的步骤,涵盖端口配置、数据目录准备、初始化与启动流程,以及排错方法,适用于构建读... 目录一、什么是mysql多实例二、二进制方式安装MySQL1.获取二进制代码包2.安装基础依赖3.清

Spring Boot集成Druid实现数据源管理与监控的详细步骤

《SpringBoot集成Druid实现数据源管理与监控的详细步骤》本文介绍如何在SpringBoot项目中集成Druid数据库连接池,包括环境搭建、Maven依赖配置、SpringBoot配置文件... 目录1. 引言1.1 环境准备1.2 Druid介绍2. 配置Druid连接池3. 查看Druid监控

Knife4j+Axios+Redis前后端分离架构下的 API 管理与会话方案(最新推荐)

《Knife4j+Axios+Redis前后端分离架构下的API管理与会话方案(最新推荐)》本文主要介绍了Swagger与Knife4j的配置要点、前后端对接方法以及分布式Session实现原理,... 目录一、Swagger 与 Knife4j 的深度理解及配置要点Knife4j 配置关键要点1.Spri

使用jenv工具管理多个JDK版本的方法步骤

《使用jenv工具管理多个JDK版本的方法步骤》jenv是一个开源的Java环境管理工具,旨在帮助开发者在同一台机器上轻松管理和切换多个Java版本,:本文主要介绍使用jenv工具管理多个JD... 目录一、jenv到底是干啥的?二、jenv的核心功能(一)管理多个Java版本(二)支持插件扩展(三)环境隔

Python中bisect_left 函数实现高效插入与有序列表管理

《Python中bisect_left函数实现高效插入与有序列表管理》Python的bisect_left函数通过二分查找高效定位有序列表插入位置,与bisect_right的区别在于处理重复元素时... 目录一、bisect_left 基本介绍1.1 函数定义1.2 核心功能二、bisect_left 与

Spring中管理bean对象的方式(专业级说明)

《Spring中管理bean对象的方式(专业级说明)》在Spring框架中,Bean的管理是核心功能,主要通过IoC(控制反转)容器实现,下面给大家介绍Spring中管理bean对象的方式,感兴趣的朋... 目录1.Bean的声明与注册1.1 基于XML配置1.2 基于注解(主流方式)1.3 基于Java

基于Python+PyQt5打造一个跨平台Emoji表情管理神器

《基于Python+PyQt5打造一个跨平台Emoji表情管理神器》在当今数字化社交时代,Emoji已成为全球通用的视觉语言,本文主要为大家详细介绍了如何使用Python和PyQt5开发一个功能全面的... 目录概述功能特性1. 全量Emoji集合2. 智能搜索系统3. 高效交互设计4. 现代化UI展示效果

Mysql中的用户管理实践

《Mysql中的用户管理实践》:本文主要介绍Mysql中的用户管理实践,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录13. 用户管理13.1 用户 13.1.1 用户信息 13.1.2 创建用户 13.1.3 删除用户 13.1.4 修改用户