版本:Unity 6 (6000.0)
语言:English
嵌套预制体
多级覆盖

预制体变体

当您希望为预制体一种资产类型,允许您存储一个包含组件和属性的游戏对象。预制体充当模板,您可以从中在场景中创建新的对象实例。 更多信息
参见 词汇表
预定义一组变体时,预制体变体非常有用。

例如,您可能希望在游戏中拥有几种不同类型的 GermSlimeTargets,它们都基于相同的 GermSlimeTarget 预制体。但是,您可能希望某些 GermSlimeTargets 携带物品,某些 GermSlimeTargets 以不同的速度移动,或者某些 GermSlimeTargets 发出额外的音效。

为此,您可以设置初始的 GermSlimeTarget 预制体以执行所有您希望所有 GermSlimeTarget 共享的基本操作,然后您可以创建多个预制体变体来

  • 通过在脚本上使用属性覆盖来更改其速度,使 GermSlimeTarget 移动得更快。

  • 通过在其手臂上附加额外的游戏对象Unity 场景中的基本对象,可以表示角色、道具、场景、摄像机、路点等。游戏对象的功​​能由附加到它的组件定义。 更多信息
    参见 词汇表
    来使 GermSlimeTarget 携带物品。

  • 通过添加一个播放咕叽声的 AudioSource 组件,为 GermSlimeTarget 提供类似鼻涕虫的咕叽声。

预制体变体继承另一个预制体的属性,称为基预制体。对预制体变体进行的覆盖优先于基预制体的值。预制体变体可以有任何其他预制体作为其基预制体,包括模型预制体或其他预制体变体。

创建预制体变体

有多种方法可以基于另一个预制体创建预制体变体。

您可以在“项目”窗口中右键单击预制体,然后选择创建 > 预制体变体。这将创建所选预制体的变体,该变体最初没有任何覆盖。您可以以预制体模式打开预制体变体,开始向其中添加覆盖。

您还可以将“层次结构”中的预制体实例拖动项目窗口显示您的 Assets 文件夹内容的窗口(项目选项卡) 更多信息
参见 词汇表
。这样做时,系统会询问您是否要创建一个新的原始预制体或预制体变体。如果您选择预制体变体,则会获得一个基于您拖动的预制体实例的新预制体变体。您在该实例上进行的任何覆盖现在都在新的预制体变体中。您可以以预制体模式打开它以添加其他覆盖或编辑或删除覆盖。

预制体变体显示为带有箭头的蓝色预制体图标。

A basic GermSlimeTarget Prefab, and a variant of that Prefab called GermSlimeTarget With GermOBlaster, as viewed in the Hierarchy window.
一个基本的 GermSlimeTarget 预制体,以及该预制体的变体“GermSlimeTarget With GermOBlaster”,如“层次结构”窗口中所示。

编辑预制体变体

当预制体变体以预制体模式打开时,根节点将显示为带有蓝色预制体图标的预制体实例。此预制体实例表示预制体变体继承自的基预制体;它不表示预制体变体本身。您对预制体变体所做的任何编辑都将成为此变体中存在的基预制体的覆盖。

The Prefab Variant GermSlimeTarget With GermOBlaster in Prefab Mode. The “GermOBlaster” Prefab is added as an override to the base Prefab
预制体模式下的“GermSlimeTarget With GermOBlaster”预制体变体。“GermOBlaster”预制体作为覆盖添加到基预制体

在上图中,如果您要选择GermSlimeTarget With GermOBlaster根游戏对象并在检查器一个 Unity 窗口,显示有关当前选定的游戏对象、资产或项目设置的信息,允许您检查和编辑值。 更多信息
参见 词汇表
中单击选择按钮,它将选择基预制体GermSlimeTarget而不是变体GermSlimeTarget With GermOBlaster,因为预制体实例是基预制体GermSlimeTarget的实例,并且选择按钮始终选择实例来自的预制体资产。

与任何预制体实例一样,您可以在预制体变体中使用预制体覆盖,例如修改后的属性值、添加的组件、删除的组件和添加的子游戏对象。也有相同的限制:您不能重新设置预制体变体中来自其基预制体的游戏对象的父对象。您也不能从预制体变体中删除其基预制体中存在的游戏对象。但是,您可以停用游戏对象(作为属性覆盖)以实现与删除游戏对象相同的效果。

注意:在预制体模式下编辑预制体变体时,您应该了解,应用这些覆盖(通过“覆盖”下拉窗口或上下文菜单)会导致您的变体的变化应用于基预制体资产。这通常不是您想要的。预制体变体的目的是提供一种方便的方法来存储有意义且可重用的覆盖集合,因此它们通常应保持为覆盖,而不是应用于基预制体资产。为了说明这一点,如果您要将额外的GermOBlaster游戏对象应用于基预制体资产(“GermSlimeTarget”),那么基预制体资产也将具有GermOBlasterGermSlimeTarget With GermOBlaster变体的全部意义在于只有此变体携带 GermOBlaster,因此添加的GermOBlaster游戏对象应保留为预制体变体内的覆盖。

当您打开“覆盖”下拉窗口时,您始终可以在其标题中看到覆盖的目标对象以及覆盖存在的上下文。对于预制体变体,标题将说明覆盖的目标是基预制体,并且存在于预制体变体中。为了使其更加清晰,应用所有按钮也显示为应用所有到基预制体

Overrides dropdown for a Prefab Variant when editing the Prefab Variant in Prefab Mode
在预制体模式下编辑预制体变体时,预制体变体的“覆盖”下拉菜单

  • 2018 年 7 月 31 日 页面发布

  • 2018.3 中添加了嵌套预制体和预制体变体

嵌套预制体
多级覆盖