【总结】Unity:代码动态加载Prefab预设体
来源:互联网 发布:json数组格式 编辑:程序博客网 时间:2024/06/06 15:47
转自:http://blog.csdn.net/linshuhe1/article/details/51355198
在进行一些功能开发的时候,我们常常将一些能够复用的对象制作成.prefab的预设物体,然后将预设体存放到Resources目录之下,使用时再动态加载到场景中并进行实例化。例如:子弹、特效甚至音频等,都能制作成预设体。
一、预设动态加载到场景:
一个预设体要能够通过代码控制在场景中进行显示,需要三个步骤,这里我们以动态加载怪物血条为例子分析一个常见的误区:
1.预设体资源加载:
- //加载预设体资源
- GameObject hp_bar = (GameObject)Resources.Load("Prefabs/HP_Bar");
通过上述操作,实现从资源目录下载入HP_Bar.prefab预设体,用一个GameObject对象来存放,此时该预设物体并未真正载入到场景中,因为还未进行实例化操作。
2.预设体实例化:
在第一步中我们已经将预设体资源加载完毕,但是为实例化的资源不会出现在场景中,所以第二不我们需要对资源进行实例化,实例化使用的是MonoBehaviour.Instantiate函数来完成的,其实质就是从预设体资源中克隆出一个对象,它具有与预设体完全相同的属性,并且被加载到当前场景中:
- //实例化预设体
- Instantiate(hp_bar);
完成以上代码之后,在当前场景中会出现一个实例化之后的对象,可以在Hierarchy栏中查看到:
因为我们没有对此实例化后的对象进行任何的属性设置,所以其属性与预设体最初的属性保持一致,并且其父节点默认为当场的场景对外层。
3.实例化对象属性设置(可选):
完成上述步骤之后,我们已经可以在场景中看到实例化之后的对象,但是通常情况下我们喜欢我们的对象之间层次感分明,而且这样也方便我们进行对象统一管理,而不是在Hierarchy中看到一大堆并排散乱对象,所以我们需要为对象设置名称已经父节点等属性。
(常见错误:对未初始化的hp_bar进行属性设置,设置之后的属性在实例化之后无法生效。这是因为我们最后在场景中显示的其实并非实例化前的资源对象,而是一个克隆对象,所以假如希望设置的属性在最后显示出来的对象中生效,我们需要对实例化之后的对象进行设置。)
正确的设置代码如下,可以看到实例化对象已成功挂在到父节点Canvas上:
- GameObject hp_bar = (GameObject)Resources.Load("Prefabs/HP_Bar");
- GameObject mUICanvas = GameObject.Find("Canvas");
- hp_bar = Instantiate(hp_bar);
- hp_bar.transform.parent = mUICanvas.transform;
- GameObject hp_bar = (GameObject)Instantiate(Resources.Load("Prefabs/HP_Bar"));
- GameObject mUICanvas = GameObject.Find("Canvas");
- hp_bar.transform.parent = mUICanvas.transform;
- 【总结】Unity:代码动态加载Prefab预设体
- 代码动态加载Prefab预设体
- Unity学习笔记13——代码动态加载Prefab预设体
- Unity3D 运行时 动态加载 预设 prefab
- Prefab - 预设体
- unity3d 动态加载 prefab
- 【Unity】3.2 利用预设(Prefab)制作可复用的组件
- unity加载prefab的方式
- Unity3D: 动态加载Prefab
- unity加载prefab的2种方式
- Unity3d学习 预设体(prefab)的一些理解
- Unity中利用代码创建prefab
- Unity 预设体 克隆方式
- Unity3D: 脚本控制动态加载预设物体
- [cnblogs镜像]Unity 指定区域随机实例化预制体Prefab 代码
- Unity在编辑器模式下动态创建Prefab
- unity之光源,材质和预设体
- 009-Prefab( 预设 ) srt字幕文件
- Memcached入门学习四(spring 集成MemCached)
- Android判断手机是否安装微信(总结)
- 真正从零开始,TensorFlow详细安装入门图文教程!
- 大数加法
- 模拟电路学习总结
- 【总结】Unity:代码动态加载Prefab预设体
- Linux tomcat关闭 出现 java.net.ConnectException: Connection refused
- MFC更改环境目录可执行文件目录下继承的值
- 使用teragen产生数据
- 【Axure 实战】基础操作记录+oa系统表单表格类原型
- fake-useragent,python爬虫伪装请求头
- Spring Boot学习(四)之web开发渲染页面 -- Thymeleaf
- 矩阵外积与内积
- QTP触发了场景恢复,但是没有重复当前步骤并继续