欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【Unity】代码动态加载Prefab预设体

程序员文章站 2022-06-11 14:42:35
...
  1. Unity学习笔记13——代码动态加载Prefab预设体
  2. 动态加载Prefab

  在进行一些功能开发的时候,我们常常将一些能够复用的对象制作成.prefab的预设物体,然后将预设体存放到Resources目录之下,使用时再动态加载到场景中并进行实例化。例如:子弹、特效甚至音频等,都能制作成预设体。

  一个预设体要能够通过代码控制在场景中进行显示,需要三个步骤:

  1. 预设动态加载到场景
  2. 预设体实例化
  3. 实例化对象属性设置:

常见错误:对未初始化的hp_bar进行属性设置,设置之后的属性在实例化之后无法生效。这是因为我们最后在场景中显示的其实并非实例化前的资源对象,而是一个克隆对象,所以假如希望设置的属性在最后显示出来的对象中生效,我们需要对实例化之后的对象进行设置。)

代码:

//预设体预设体资源加载
GameObject hp_bar = (GameObject)Resources.Load("Prefabs/HP_Bar");
//获取节点Canvas
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")); 
//获取节点Canvas
GameObject mUICanvas = GameObject.Find("Canvas");
//实例化对象属性设置
hp_bar.transform.parent = mUICanvas.transform;

另外一种设置父对象的方法:

//预设体预设体资源加载,获取预制体 
GameObject prefab = Resources.Load<GameObject>("Prefabs/Image"); 
//预设体实例化:
GameObject obj = GameObject.Instantiate(prefab); 
//实例化对象属性设置
obj.transform.SetParent(this.transform, false);
//这里的this挺难理解,实际上是指父对象,后面的参数,如果为true,则会修改父相对位置,比例和旋转,以使对象保持与以前相同的世界空间位置,旋转和比例。