unity资源包的依赖关系(2)
来源:互联网 发布:圣思园java视频百度云 编辑:程序博客网 时间:2024/05/22 14:59
我写这篇博客的主要目的,给那些初学的unity人,以便能够清晰的了解打包的操作步骤,以及如何加载出资源。同时对于路径啦,要不要跟后缀名啦,同步加载,还是异步加载啦,等等这些给出最简单的一个版本,至于如何封装一个比较晚上的资源打包,处理依赖关系,等等真正上线游戏中运用到的加载还是有待看官自己慢慢的在项目中总结,当然我也会定期的更新博客,将自己遇到一些坑坑抖搂出来。
ok,转入正题啦~~
建立项目:
我们在层级视图新建立一个MyCube立方体,然后拖拽到右边的Project视图,得到一个预置体。下面我们为了后面的叙述,先更换下材质球,我们新建立一个材质球,更换颜色,然后将此材质球赋值给立方体的材质变量,如下所示:
ok,这个是后面要说的问题,暂时不略过哦。
接下来就是打包了,此时我有一个问题,那就是我们能不能只打包指定的资源呢?当然是可以的。于是有如下的代码:
using UnityEngine;using System.Collections;using UnityEditor;using System.IO;public class BuildAssetBundle{ [MenuItem("xxxx/Build")] static void BuildAssetBuild() { string outDir = "Bundles"; if(!Directory.Exists(outDir)) { Directory.CreateDirectory(outDir); } AssetBundleBuild[] buildMap = new AssetBundleBuild[1]; //建立一个容器数组 buildMap[0].assetBundleName = "MyCube"; <span style="white-space:pre">//给最终生成的AssetBundle起一个名字,你随意哈。 string[] assets = new string[1]; <span style="white-space:pre">//此AssetBundle里面,我们打包了一个prefab assets[0] = @"Assets\MyCube.prefab";<span style="white-space:pre"><span style="white-space:pre"></span>//写prefab的完整路径,相对于Assets的 buildMap[0].assetNames = assets;<span style="white-space:pre">//将资源字符串赋值给第一个容器的assetNames属性 BuildPipeline.BuildAssetBundles(outDir, buildMap, BuildAssetBundleOptions.None, EditorUserBuildSettings.activeBuildTarget); }}
不好意思哈,我这里的命名很不规范,主要想展示下,任意性,嘿嘿。。。
此时,我们的Unity工具栏,就会多一个选项了:
这样,我们点击之后,就可以生成AssetBundle了。
此时文件夹Bundles下的mycube就是我们的资源包喽!亲,它里面可以包含多个prefab,以及贴图啦,脚本啦等等。
有了包,那么就是讲解下加载到实例化的过程了。
using UnityEngine;using System.Collections;public class NewBehaviourScript : MonoBehaviour { void Start() { StartCoroutine(LoadAssetBundle()); } IEnumerator LoadAssetBundle() { string assetBundlePath = @"file:\"+Application.dataPath + @"\..\Bundles\MyCube"; //这里不要忘记使用file:\开头呦,有的博客写的是file:\\,第一个\是 WWW www = new WWW(assetBundlePath);<span style="white-space:pre"></span> //转义符号,我们这里使用的是@代替了,所以写一个即可。 while(!www.isDone) { Debug.Log("正在加载assetbundle,请稍等!"); yield return null; } Debug.Log("assset bundle is loaded."); //1, 列出包里有哪些资源 AssetBundle assetBundle = www.assetBundle; string[] assetNames = assetBundle.GetAllAssetNames(); for(int i=0;i<assetNames.Length;++i) { Debug.Log(assetNames[i]); } //2,使用异步加载得到prefab AssetBundleRequest request = assetBundle.LoadAssetAsync("MyCube", typeof(GameObject)); //这里写不写后缀名都行,比如MyCube.prefab亦可。 while (!request.isDone) { Debug.Log("具体的资源还没有加载完毕!"); yield return null; } GameObject go = Instantiate(request.asset) as GameObject; go.name = "xxxx"; //3,使用同步加载得到prefab GameObject go2 = (GameObject)assetBundle.LoadAsset("MyCube", typeof(GameObject)); <span style="font-family: Arial, Helvetica, sans-serif;">//这里写不写后缀名都行,比如MyCube.prefab亦可。</span> GameObject newGo = Instantiate(go2) as GameObject; newGo.name = "xxx"; }}
0 0
- unity资源包的依赖关系(2)
- unity资源包的依赖关系(1)
- Unity AssetBundle资源打包,Depend依赖关系
- Unity资源之间的关系
- Spring1.2或更早的jar包依赖关系
- Spring的jar包依赖关系
- 查看Linux Deb包的依赖关系
- spring 各个包之间的依赖关系
- Maven查看JAR包的依赖关系
- 解决包依赖关系
- 包依赖关系处理
- 一些看起来不错的Unity资源包
- Unity读写资源包里面的文件
- unity标准资源包FirstPersonController的分析
- J2EE框架Jar包说明及各框架下的Jar包依赖关系(二)
- J2EE框架Jar包说明及各框架下的Jar包依赖关系(一)
- unity反向查找资源依赖
- Unity 创建资源包
- Swift基础(二):运算符、字符串和字符、数组、集合、字典
- C/S和B/S的异同点
- 安装MySQL样本数据库Sakila
- Reacting to rumors
- 第32章:字符串匹配问题: 朴素算法,Rabin-Karp算法
- unity资源包的依赖关系(2)
- Runtime之概念,功能和怎么使用
- hdu 2923 Einbahnstrasse【floyd】
- Redis在Centos7上的安装部署
- byte数组转float 以及byte转其他类型时为什么要&0xff
- Genymotion无法启动虚拟机的问题解决办法(续)
- 排序算法的 时间复杂度 和 空间复杂度
- 如何编写一个分布式数据库
- Nginx流量copy到测试环境的方法