陈巧倩

Unity中文版-Create Gameplay Prefabs Prefab Variants(自翻译)

· 76 words · 1 minutes to read
Categories: Unity
Tags: Document

翻译Unity中文版的初衷是因为官方提供的中文版存在缺陷,而且翻译的不全。现在基于Unity2023.2版本对官方文档进行翻译。

Prefab变体 🔗

Prefab Variants在您希望拥有一组预定义的Prefab变体时非常有用。

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

为此,您可以设置初始的GermSlimeTarget Prefab来执行所有您希望所有GermSlimeTarget共享的基本操作,然后您可以创建多个Prefab Variants来实现以下目标:

  • 通过对脚本的属性重写,使GermSlimeTarget更快地移动。
  • 通过将附加的GameObject附加到它的手臂上,使GermSlimeTarget携带物品。
  • 通过添加一个播放squelching声音的AudioSource组件,为GermSlimeTarget提供类似蛞蝓的抽吸声效果。

Prefab Variant继承了另一个Prefab的属性,称为基础Prefab。对于Prefab Variant进行的覆盖将优先于基础Prefab的值。Prefab Variant可以将任何其他Prefab作为其基础,包括Model Prefabs或其他Prefab Variants。

创建一个Prefab Variant 🔗

根据另一个Prefab创建Prefab Variant有多种方法。

您可以在Project视图中右键单击一个Prefab,然后选择Create > Prefab Variant。这将创建所选Prefab的一个变体,最初没有任何覆盖。您可以打开Prefab Variant进入Prefab模式并开始向其中添加覆盖。

您还可以将Hierarchy中的Prefab实例拖动Project窗口中。这样做时,对话框会询问您想要创建新的原始Prefab还是Prefab Variant。如果选择Prefab Variant,则会创建一个以拖动的Prefab实例为基础的新Prefab Variant。您在该实例上进行的所有覆盖现在都在新的Prefab Variant中。您可以打开它进入Prefab模式以添加其他覆盖,或编辑或删除覆盖。

Prefab Variants用带有箭头的蓝色Prefab图标显示。

基本的GermSlimeTarget Prefab,以及名为“GermSlimeTarget With GermOBlaster”的Prefab Variant,如在Hierarchy窗口中显示。

编辑Prefab Variant 🔗

当在Prefab模式下打开Prefab Variant时,根(root)将显示为带有蓝色Prefab图标的Prefab实例。该Prefab实例代表Prefab Variant所继承的基本Prefab;它不代表Prefab Variant本身。对Prefab Variant所进行的任何编辑都将成为存在于Variant中的基础的覆盖。

在上面的截图中,如果选择“GermSlimeTarget With GermOBlaster”根GameObject并单击Inspector中的Select按钮,将选择基础Prefab“GermSlimeTarget”,而不是Variant“GermSlimeTarget With GermOBlaster”,因为Prefab实例是基础Prefab“GermSlimeTarget”的实例,Select按钮始终选择实例来自的Prefab资产。

与任何Prefab实例一样,您可以在Prefab Variant中使用Prefab覆盖,例如修改的属性值、添加的组件、移除的组件和添加的子级GameObject。这些也有相同的限制:您不能将来自基础Prefab的GameObject重新父级到Prefab Variant中。您也不能从Prefab Variant中删除在基础Prefab中存在的GameObject。但是,您可以将GameObject停用(作为属性覆盖)以实现相同的效果,就像删除GameObject一样。

注意:当在Prefab模式中编辑Prefab Variant时,您应该理解应用这些覆盖(通过Overrides下拉窗口或上下文菜单)将导致将您的Variant的变化应用于基础Prefab资产。这通常不是您想要的。Prefab Variant的目的是为了提供一种方便的方式来存储有意义且可重用的覆盖集合,因此它们通常应该保留为覆盖,而不是应用于基础Prefab资产。为了说明这一点,如果你应用额外的GermOBlaster GameObject到基础Prefab资产(“GermSlimeTarget”),那么Prefab资产也将具有GermOBlasterGermSlimeTarget With GermOBlaster Variant的整个意义在于只有这个变体携带一个GermOBlaster,所以添加的GermOBlaster GameObject应该作为覆盖保留在Prefab Variant内部。

当打开Overrides下拉窗口时,您可以在其标题中始终看到覆盖应用的对象以及覆盖存在的上下文。对于Prefab Variant,标题将显示覆盖应用于基础Prefab并存在于Prefab Variant中。为了特别明确,Apply All按钮也显示为Apply All to Base

当在Prefab模式中编辑Prefab Variant时,Prefab Variant的Overrides下拉菜单

结论 🔗

搬砖愉快!