Unity学习——Prefebs

Prefebs

Unity的 Prefeb系统允许你将一个带有组件,属性值和子 GameObject的 GameObject,创建,配置并存储为可重用的 Asset。Prefab Asset就像是一个模板,你可以在 Scene中创建新的 Prefab实例。
一些常见的使用 Prefab的例子:

  • 环境 Assets:关卡中会使用多次的特定种类的树。
  • NPC
  • 炮弹
  • 玩家主角色:玩家 prefeb可以放置在每个关卡(独立场景)的起始点。

创建 Prefabs

创建 Prefab Assets

要创建一个 Prefab Asset,从 Hierarchy窗口拖动 GameObject到 Project窗口。GameObject和它的所有组件和子 GameObject都成为一个新的 Asset。Project窗口的 Prefabs Assets是以GameObject的缩略图或 蓝色立方体Prefab图标显示的。

创建 Prefab Asset的流程也将原始 GameObject变为一个 Prefab实例。Prefab实例在 Hierarchy里是以蓝色文本显示的。

创建 Prefab实例

可以简单地直接从 Project视图中拖动 Prefab Asset到 Hierarchy或 Scene视图中,来创建 Prefab实例。

编辑 Prefab

在 Prefab Mode中打开 Prefab Asset即可对它进行编辑。在 Prefab Mode中的改变会影响到该 Prefab的所有实例。

进入和离开 Prefab Mode

有以下几种方式能进入 Prefab Mode:

  • 在 Project窗口中双击它。
  • 使用 Hierarchy窗口中 Prefab旁边的小箭头。
  • 在 Inspector中点击 "Open"按钮。
    进入 Prefab Mode后在 Scene视图和 Hierarchy窗口中就只剩下该 Prefab了。

    在 Prefab Mode,Scene视图的顶部会显示一个breadcrumb导航栏。最右边的就是打开的 Prefab。

    此外,Hierarchy窗口顶部也有一个 Prefab导航栏显示了当前打开的 Prefab。
自动保存

Prefab Mode在Scene视图的右上方有一个自动保存设置。如果 enabled,那么对 Prefab的任何改动都会自动保存到 Prefab Asset。默认是打开的。如果编辑的时候有卡顿,那么关掉此设置可能会有帮助。

实例覆盖(Instance overrides)

实例覆盖允许你在 Prefab实例中创建变量同时将这些实例链接到同一个 Prefab Asset。
当你修改Prefab Asset时,这些改动会影响到其所有实例。当然,你也可以直接对单个实例进行修改。这样做会为那个特殊实例创建一个实例覆盖。
比如说你有一个 Prefab Asset "Robot",你可以在游戏中的多个关卡添加此 “Robot”。然而,每个“Robot”的速度和音效都不相同,有以下四种类型的实例覆盖:

  • 覆盖属性值。
  • 添加组件。
  • 移除组件。
  • 添加子 GameObject。
    同时 Prefab实例有一些约束:你不能重定义属于 Prefab的 GameObject,你不能移除属于 Prefab的 GameObject;你可以通过禁用 GameObject来代替移除它(这视为属性覆盖)。
    在 Inspector窗口,实例覆盖会以粗体显示名字且左边框会有一条蓝线。当你添加一个组件到 Prefab实例时,蓝线会布满整个组件。
覆盖优先考虑

Prefab实例的覆盖属性值总是优先于 Prefab Asset中的值。这意味着如果你在 Prefab Asset中改变属性值,它并不会影响到实例中被覆盖的属性值。
如果你在 Prefab Asset中做了改动,但是却没有更新到实例中时,就需要去检查该属性值是否被覆盖过。因此,最好是在必须时才去使用实例覆盖。

通过实例编辑 Prefab

Inspector的 Prefab实例有三个控制:Open,Select和 Overrides:

Open按钮是在 Prefab Mode下打开实例的 Prefab Asset。Select按钮是从 Project窗口中选择实例的 Prefab Asset。Overrides按钮则可以打开覆盖下拉菜单。

Overrides下拉菜单

Overrides下拉菜单显示了Prefab实例的所有覆盖。他也允许你将覆盖从实例应用到 Prefab Asset,或者将实例的覆盖恢复到 Prefab Asset上的值。Overrides下拉按钮只会出现在根Prefab实例上。
Overrides下拉菜单还允许你应用/恢复个体 Prefab覆盖,或者一次性应用/回复所有 Prefab覆盖。

  • 应用一个覆盖(目前只在你的 Prefab实例上)并修改到 Prefab Asset。这意味着 Prefab Asset现在已经修改过了,且 Prefab实例不再将那次修改作为一个覆盖。
  • 恢复一个覆盖并修改到 Prefab实例上。这会遗失你的覆盖并将其恢复到 Prefab Asset的状态。
    下拉菜单以修改,添加组件和添加 GameObject(包括其他 Prefabs)的形式显示了一系列位于实例上的修改列表。

    单机某个条目会显示一个浮动视图,用来显示更改并允许你恢复或应用此更改。

    Revert All和 Apply All按钮会一次性恢复或应用所有更改。
上下文菜单

你也可以在Inspector的上下文菜单(即在相应位置点击鼠标右键)中恢复或应用个体覆盖。
覆盖属性是黑体字显示的:

修改的组件可以通过Inspector中组件的齿轮形状的下拉菜单来恢复或应用:

添加组件有一个加号标记:

删除组件则有一个减号标记:

作为孩子被添加到 Prefab实例的GameObjects(包含其他 Prefabs)有一个位于 Hierarchy的加号标记

posted @ 2020-05-07 01:23  清平乐2019  Views(917)  Comments(0Edit  收藏  举报