AssetBundle 1 (Building And Loading)
来源:互联网 发布:xampp部署php网站 编辑:程序博客网 时间:2024/06/16 12:02
1. Build
using UnityEngine;using System.Collections;using UnityEditor;public class BuildBundle { private const string VARIANT = "ab"; [MenuItem("Test/Build Asset Bundles")] static void BuildABs() { // Create the array of bundle build details. AssetBundleBuild[] buildMap = new AssetBundleBuild[2]; // prfab buildMap[0].assetBundleName = "111"; string[] assetNames = new string[1]; assetNames[0] = "Assets/res/Prefabs/char/307005/307005.prefab"; buildMap[0].assetNames = assetNames; //texture buildMap[1].assetBundleName = "222"; assetNames = new string[1]; assetNames[0] = "Assets/res/Models/char/307005/Materials/307005_001.tga"; buildMap[1].assetNames = assetNames; string outputPath = Application.dataPath + "/ABs"; BuildAssetBundleOptions op = BuildAssetBundleOptions.ChunkBasedCompression; // LZ4 //BuildAssetBundleOptions op = BuildAssetBundleOptions.UncompressedAssetBundle; BuildPipeline.BuildAssetBundles(outputPath, buildMap, op); AssetDatabase.Refresh(); }}
2.
Load
using UnityEngine;using System.Collections;using System.Collections.Generic;public class LoadAB : MonoBehaviour {// Use this for initializationvoid Start () { string ABDir = Application.dataPath + "/ABs/"; string mainManifestPath = ABDir + "ABs"; var rootBundle = AssetBundle.LoadFromFile(mainManifestPath); AssetBundleManifest manifest = rootBundle.LoadAsset<AssetBundleManifest>("AssetBundleManifest"); string prefabBundleName = "111"; //dependBundle List<AssetBundle> dependBundleList = new List<AssetBundle>(); string[] dependPath = manifest.GetAllDependencies(prefabBundleName); for (int i = 0; i < dependPath.Length; i++) { Debug.Log(dependPath[i]); var dependBundle = AssetBundle.LoadFromFile(ABDir + dependPath[i]); dependBundleList.Add(dependBundle); } var myLoadedAssetBundle = AssetBundle.LoadFromFile(ABDir + prefabBundleName); if (myLoadedAssetBundle == null) { Debug.Log("Failed to load AssetBundle!"); return; } string prefabAssetPath = "Assets/res/Prefabs/char/307005/307005.prefab"; var prefab = myLoadedAssetBundle.LoadAsset<Object>(prefabAssetPath); Instantiate(prefab); // unload for (int i = 0; i < dependBundleList.Count; i++) { dependBundleList[i].Unload(false); } myLoadedAssetBundle.Unload(false);}}
Node:
Each AssetBundle will have an associated file with a .manifest extension. This manifest file is a text file that you can open with any text editor. It provides information such as the file CRC and asset dependencies. The AssetBundle in the example above has a manifest file that looks like this:
ManifestFileVersion: 0CRC: 4036177110Hashes: AssetFileHash: serializedVersion: 2 Hash: 2adb3efdc80c7f64bf065717f6e98867 TypeTreeHash: serializedVersion: 2 Hash: 8e187a830a7454c6df7fc214f8624bacHashAppended: 0ClassTypes:- Class: 1 Script: {instanceID: 0}- Class: 4 Script: {instanceID: 0}- Class: 21 Script: {instanceID: 0}- Class: 28 Script: {instanceID: 0}- Class: 43 Script: {instanceID: 0}- Class: 48 Script: {instanceID: 0}- Class: 74 Script: {instanceID: 0}- Class: 90 Script: {instanceID: 0}- Class: 91 Script: {instanceID: 0}- Class: 95 Script: {instanceID: 0}- Class: 136 Script: {instanceID: 0}- Class: 137 Script: {instanceID: 0}Assets:- Assets/res/Prefabs/char/307005/307005.prefabDependencies:- D:/U3D Pro/2017_1_4_Study_AssetBundle/Assets/ABs/222
In addition to these, there are another two files created: Another AssetBundle and another manifest file. These two are always created whenever AssetBundles are created. They are created for each folder that AssetBundles are created in, thus if you always create AssetBundles in the same place, you will only get two extra files. The additional manifest file - in this example AssetBundles.manifest - can be used in much the same way as other manifest files but will show information on how AssetBundles relate and depend on each other. In this case, since we only have a single AssetBundle, it has no other dependencies.
ManifestFileVersion: 0CRC: 2131931493AssetBundleManifest: AssetBundleInfos: Info_0: Name: 111 Dependencies: Dependency_0: 222 Info_1: Name: 222 Dependencies: {}
Compress:
BuildAssetBundleOptions.ChunkBasedCompression
-- Use chunk-based LZ4 compression when creating the AssetBundle.
LZ4 Format
Unity also supports LZ4 compression, which results in larger compressed file sizes, but does not require the entire bundle to be decompressed before use. LZ4 is a “chunk-based” algorithm, and therefore when objects are loaded from an LZ4-compressed bundle, only the corresponding chunks for that object are decompressed. This occurs on-the-fly, meaning there are no wait times for the entire bundle to be decompressed before use. The LZ4 Format was introduced in Unity 5.3 and was unavailable in prior versions.
- AssetBundle 1 (Building And Loading)
- AssetBundle and the AssetBundle Manager介绍
- AssetBundle and the AssetBundle Manager介绍
- AssetBundle loading failed because.....已解决
- Building a WPF Sudoku Game: Part 5 - The AI Battle: Loading and Comparing AI Plug-ins (zz)
- ASSETBUNDLES AND THE ASSETBUNDLE MANAGER
- Building and Running
- Building and Running Modules
- Classes and class loading
- loading and rendering page
- Loading, Linking, and Initializing
- Storing and Loading Strings
- AssetBundle(1)AssetBundle的初步认识
- Tutorial for building J2EE Applications using JBOSS and ECLIPSE -1
- The Building Blocks-Enterprise Applications Part 1- Overview and ERP
- unity AssetBundle 使用方法1
- unity AssetBundle 使用方法1
- AssetBundle资源包--1
- AndroidStudio打包生成APK 指定文件名
- spring boot application properties配置详解(附官网链接)
- Python 编码规范(Google)
- jenkins 运用Windows Slave执行 python程序
- 高通平台手机开发之Sensor
- AssetBundle 1 (Building And Loading)
- 使用User-Agent防止HttpClient发送http请求时403 Forbidden和安全拦截
- 解决zf create db-table 创建数据库报错的问题
- java sigar 获取本地信息代码实例,以及运行遇到的问题
- 在Eclipse中如何创建Maven多模块工程
- iptables
- android png和jpg的区别及使用场景
- 我设计的策略模式(Strategy)
- 右侧带按钮的TextBox