Unity Prefabs 预设体

prefabs 预设体是一个游戏物体及其组件的集合。

Unity prefab系统将游戏物体所有的组件,属性值和子物体作为一个可重复使用的资源,并且允许你新建,配置,存储这样一个游戏物体。预制资产充当模板,您可以在该模板中在场景中创建新的预制实例。

prefabs一般用在如非玩家角色(NPC),场景中的多个位置使用道具的或项目中的多个场景中使用的道具。

设置预设体和直接复制游戏物体的区别:

1、复制要求场景中先存在被复制的游戏对象,而预设体仅仅需要提前制作好预设体,场景中有无该游戏物体不重要。

2、复制后的游戏物体不会随着被复制物体的改变而改变,两者是相互独立,不受影响的,而预设体实例化的游戏物体会随着预设体的改变而改变,在一定条件下可以对预设体进行改变。

对Prefab所做的任何编辑都会自动反映在它的实例中,使您可以轻松地对整个项目进行广泛的更改,而无需对资产的每个副本重复进行相同的编辑。但对于实例,我们也可以对其进行覆盖,

使用Prefabs,可以在运行时实例化开始时不存在于场景中GameObjects, - 例如,在游戏过程中的恰当时刻出现的电,特效,射弹或NPC。

 

prefabs Mode预制模式,双击project下的预制体,或者在Hierarchy下选择预设体实例对象,点击右侧展开小箭头或者在Inspector下点击open按钮,即可打开预制模式,在此模式下对预设体进行编辑,默认的prefabs背景是一个空白的场景,我们也可以选择一个特定场景,这样可以根据它在场景中的效果更好的修改它,且其他游戏物体都是不可选择的,若要改变:Edit->Project Setting。

Unity Prefabs 预设体

 Instance overrides:实例覆盖,对于预设体的实例对象,我们可以稍作修改,以满足我们的不同需求,而这种修改有局限,只包括以下几种情况:1、重新覆盖属性值 2、增减组件3、增加子物体。

不可以删除子物体,但可以关闭该物体,这就是第一种情况了(1、重新覆盖属性值)。

针对修改的情况,Unity也会有不同的标记,

1、如果我们在Inspector窗口对prefabs实例的属性值进行了修改,则该值会粗体显示,且左侧会有蓝色细条显示,如图:

Unity Prefabs 预设体Unity Prefabs 预设体

右击该属性,可重置或者应用 到预设体中。

 2、增减组件,在Inspector面板上会有加号或者减号。

3、增加子物体,在Hierarchy面板上新加的子物体会有一个小小的加号。

 

Prefab实例上的重写属性值始终优先于Prefab Asset的值。这意味着如果更改Prefab资产上的属性,则它对覆盖该属性的实例没有任何影响。

Nested prefabs:嵌套预设体 预设体可以嵌套,在prefab Mode下,拖进去就可以啦。

创建预设体变体:Prefab Variant继承了另一个Prefab(base 基)的属性,。对Prefab Variant进行的覆盖优先于Prefab的基础值。预制变体可以使用任何其他预制件作为其基础,包括模型预制件或其他预制变体。我觉得此处类似于类的继承,通过对预设体的改变创造出新的预设体变体,来满足我不同的开发需求。

创建的方法有:1、在Project面板,选择prefabs,右击,新建一个prefab variant。或者是在Hierarchy面板将预设体实例拖到Project面板上,在对话框弹出的时候选择变体。

Unpacking prefab :打开预设体实例。即在Hierarchy 面板上将预设体实例转为普通游戏物体,让它和预设体不再有联系,这是创建一个预设体的逆过程。

!如果您打开包含嵌套预制件的预制件,则嵌套的预制件仍然是预制件实例,并且仍然具有指向其各自预制件资产的链接。

!如果打开的是一个Prefab Variant,根将会有一个新的Prefab实例,它是基预制件的一个实例。

在运行状态实例化一个预设体:和使用代码重新创建一个游戏物体相比,实例化一个预设体有更多益处:

1、仅需要一行代码

2、在Scene面板、Inspector面板和Hierarchy面板可以快速轻松地设置,测试和修改预设体。

3、改变实例化的对象无需改变代码。

此处不太理解,明日再学习啦,晚安!