Unity学习笔记(5):动态加载Prefab
第一种方法,从Resources文件夹读取Prefab
Assets/Resources文件夹是Unity中的一个特殊文件夹,在博主当前的认知里,放在这个文件夹里的Prefab可以被代码动态加载
直接上代码
GameObject Prefab = (GameObject)Resources.Load("Prefabs/Character");
Instantiate(Prefab);
第二种方法,绝对路径读取Prefab
这种方法仅限Editor模式使用,在制作插件的时候会经常用到
GameObject gb = AssetDatabase.LoadAssetAtPath("Assets/Prefabs/Character.prefab", typeof(GameObject)) as GameObject;
Instantiate(gb)
Resources.Load函数返回一个object对象,第一个参数为以Resources为根目录,目标Prefab的路径,第二个参数为Prefab的名字,最后将这个object对象强转成(GameObjcet)就可以获得Prefab了
第三种方法,把Prefab打包成AssetBundle并且使用AssetBundle相关API动态加载
1.首先在资源管理器中找到你想打包的Prefab,找到Inspector页面下面的Asset_Labels,打开
发现AssetBundle后面有两个选项,第一个选项为AssetBundle的包名,第二个选项为包的后缀名,自定义你想要的包名和后缀,将想要打在一个包的资源的AssetBundle的包名和后缀设置成一样的
2.编写AssetBundle生成工具
在Asset下创建文件夹Plugins,再在Plugins下创建文件夹Editor,在Plugins/Editor下创建脚本CreateAssetBundles.cs
Plugins/Editor和Resource一样是特殊路径,在Plugins下的脚本的编译优先级高于普通脚本。
CreateAssetBundles.cs:
using UnityEditor;
using System.IO;
public class CreateAssetBundles {
//设定AssetBundle的储存路径
static string AssetbundlePath = "Assets" + Path.DirectorySeparatorChar + "assetbundles" + Path.DirectorySeparatorChar;
//编辑器扩展
[MenuItem("Assets/Build AssetBundle")]
static void BuildAssetsBundles()
{
//创建路径
if (Directory.Exists(AssetbundlePath) == false)
{
Directory.CreateDirectory(AssetbundlePath);
}
//使用LZMA算法打包
BuildPipeline.BuildAssetBundles(AssetbundlePath, BuildAssetBundleOptions.None, BuildTarget.StandaloneWindows64);
}
}
BuildPipeline.BuildAssetBundles的第二个参数是打包的压缩方式
有三个可选参数
BuildAssetBundleOptions.None LZMA算法压缩,压缩包小,加载慢
BuildAssetBundleOptions.UncompressedAssetBundle; 不压缩,包大,加载快
BuildAssetBundleOptions.ChunkBasedCompression LZ4压缩,压缩率比LZMA低,可以加载指定资源不用解压全部
保存
回到Unity Editor,点击Assets可以看到最下面出现了Build AssetBundle选项,点击Build AssetBundle,打包
打包完成后可以在刚刚设置的AssetBundle所在路径找到几个文件
这几个文件具体是什么暂时不讨论
3.加载Prefab
创建脚本AssetBundleLoader.cs
AssetBundleLoader.cs:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class AssetBundleLoader
{
//参数1是AssetBundle的路径,参数2是资源的名称
public static GameObject LoadAssetBundle(string Path, string Name)
{
//1.卸载数据,如果有某个系统来管理加载好的数据就不要加下面这句了
AssetBundle.UnloadAllAssetBundles(true);
//2.加载数据
AssetBundle ab = AssetBundle.LoadFromFile(Path);
return ab.LoadAsset<GameObject>(Name);
}
}
可以通过AssetBundleLoader.LoadAssetBundle(string, string)来加载Prefab等资源,关于这个函数要不要先卸载AssetBundle,这取决于你的框架是否只需要加载一次这个包,并且有一个管理这些资源的系统,我这种做法无疑是降低效率的(其实就是懒得再搭个系统),根据实际情况用不同的方式来加载AssetBundle吧
Unity学习笔记(5):动态加载Prefab的更多相关文章
- thinkphp学习笔记9—自动加载
原文:thinkphp学习笔记9-自动加载 1.命名空间自动加载 在3.2版本中不需要手动加载类库文件,可以很方便的完成自动加载. 系统可以根据类的命名空间自动定位到类库文件,例如定义了一个类Org\ ...
- Unity 动态加载 Prefab
Unity3D 里有两种动态加载机制:一个是Resources.Load,另外一个通过AssetBundle,其实两者区别不大. Resources.Load就是从一个缺省打进程序包里的AssetBu ...
- webpack学习笔记--按需加载
为什么需要按需加载 随着互联网的发展,一个网页需要承载的功能越来越多. 对于采用单页应用作为前端架构的网站来说,会面临着一个网页需要加载的代码量很大的问题,因为许多功能都集中的做到了一个 HTML 里 ...
- Unity实现精灵资源动态加载
private Sprite LoadSourceSprite(string relativePath) { //把资源加载到内存中 UnityEngine.Objec ...
- node 学习笔记 - Modules 模块加载系统 (1)
本文同步自我的个人博客:http://www.52cik.com/2015/12/11/learn-node-modules-path.html 用了这么久的 require,但却没有系统的学习过 n ...
- Openstack本学习笔记——Neutron-server服务加载和启动源代码分析(三)
本文是在学习Openstack过程中整理和总结.因为时间和个人能力有限.错误之处在所难免,欢迎指正! 在Neutron-server服务载入与启动源代码分析(二)中搞定模块功能的扩展和载入.我们就回到 ...
- Office365学习笔记—Lookup类型加载条目过多解决方案
1,随着接触的项目越来越多,遇到的各种奇葩的问题也越来越多,不得不说,SharePoint是个好东西,提高了开发效率,简化了很多基础的功能.但是令人头疼的问题是,当你想做个稍微复杂点的功能,就不得不研 ...
- Spring学习笔记(1)——资源加载
<!-- 占坑,迟点补充底层原理 --> Spring支持4种资源的地址前缀 (1)从类路径中加载资源——classpath: classpath:和classpath:/是等价的,都是相 ...
- node 学习笔记 - Modules 模块加载系统 (2)
本文同步自我的个人博客:http://www.52cik.com/2015/12/14/learn-node-modules-module.html 上一篇讲了模块是如何被寻找到然后加载进来的,这篇则 ...
随机推荐
- 通过Python实现一个文档的半自动录入工具
需求出现/使用场景: 因为公司需要将word办的接口文档在线化,看起来是个很好的事情,但是就是苦逼了我们这些干活的,其中工程量最大的就是参数的录入,要是参数少也罢,有的接口动辄三四十个参数,更甚八九十 ...
- uva 12508 - Triangles in the Grid(几何+计数)
版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/u011328934/article/details/35244875 题目链接:uva 12508 ...
- 【洛谷】【线段树+位运算】P2574 XOR的艺术
[题目描述:] AKN觉得第一题太水了,不屑于写第一题,所以他又玩起了新的游戏.在游戏中,他发现,这个游戏的伤害计算有一个规律,规律如下 1. 拥有一个伤害串为长度为n的01串. 2. 给定一个范围[ ...
- 最易懂的layui分页
该篇文章是在layui前端框架之分页基础上简洁化和详细化. 首先该示例采用的是Spring+MyBatis Plus+SpringMVC(常规的SSM框架),持久层换成MyBatis也行. 至于lay ...
- 404 Note Found队Beta3
目录 组员情况 组员1(组长):胡绪佩 组员2:胡青元 组员3:庄卉 组员4:家灿 组员5:凯琳 组员6:翟丹丹 组员7:何家伟 组员8:政演 组员9:黄鸿杰 组员10:刘一好 组员11:何宇恒 展示 ...
- 【css】css实现点击Toggle功能/icon切换
①实现Toggle功能 html结构: <div class="cssTog"><label> <p> 专业:B020309现代企业管理(独立本 ...
- ORM增删改查(django)
单表操作: 一.添加 (1)方式一 from mysite.models import * def add(request): book= Book(name="python" ...
- BZOJ4006: [JLOI2015]管道连接(斯坦纳树,状压DP)
Time Limit: 30 Sec Memory Limit: 128 MBSubmit: 1171 Solved: 639[Submit][Status][Discuss] Descripti ...
- MAC上安装GCC失败
问题 在用brew安装GCC时, 报了如下错误. ➜ ~ brew install gcc ==> Installing dependencies for gcc: isl, mpfr and ...
- 记一次Apache Carbondata PR的经历
前言 前段时间有幸接触到Apache Carbondata,试用过程中发现了一个小小的问题,并且又很快的定位到了问题.然后在社区群里反映了下,负责人问愿不愿意提个JIRA,PR,然后我在没有任何开源 ...