SMART替换是一个Unity插件,可帮助您恢复断开的预制链接。除此之外,它还可以使用包含相同脚本的类似预制片中的预制片,而不会丢失任何更改或对象引用。
为了使用插件,需要为您的项目设置相关.NET版本。否则它不会编译。您可以通过: File -> Build settings -> Other settings -> Configuration -> Scripting Runtime Version -> .NET 4.x Equivalent
下载和安装软件包后,您可以通过导航到Tools -> Replace prefab...来打开“智能替换窗口”。
以下示例将显示插件的主要用例。 YouTube上还有一个视频,可以更生动地解释插件。

为了restore a prefab link ,首先将场景对象拖到窗口的相应字段中。接下来,在Unity Project窗口中找到原始的预制,然后将其放在fresh prefab字段上。
在Transfer component values下,您可以选择所有可能要保留的更改的组件。除了transform值外,目前不支持Unity组件的设置。
制作这些设置后,您可以击中Replace ,并且将恢复预制链接,而不会丢失您在场景中对对象进行的更改。
通常在游戏开发中,创建了虚拟预制措施来测试游戏Elememt的特定功能。在游戏开发的后期阶段,将创建一个更好的此按钮的版本 - 使用更漂亮的型号,纹理,着色器等。
因此,如果您只有虚拟预制措施的级别,但是您想用新的,更好的版本smart.replace替换所有级别,可以为您提供帮助。
下面的示例图像显示了带有按钮和门的场景。该按钮具有一个名为Button Click的脚本,其中包含对门对象的引用,因此单击时可以打开或关闭门。

如您在项目视图中所看到的,还有另一个按钮预制,称为Button 1 。它看起来有些不同,但也包含ButtonClick组件,因此可以像我们当前的按钮一样使用。这是替换的好候选者,因此我们首先将场景对象放入Smart.Replace窗口,然后将“ Better Button Prefab”放置在更换后的门参考后,然后replace 。

该按钮已成功替换,并且仍然对门有参考,因此它仍然有效!
就像这样,所有组件的所有设置都可以在更换过程中维护,例如integer数值, colors , strings等。
Fresh prefab不需要具有与scene object相同的对象层次结构,因为SMART仅关心组件的交集(有关更多信息,请参见限制)。
我们现在更换门怎么样?这似乎有点棘手,因为现在的门还没有由按钮引用。但是,当您启用选项Transfer external references时,Smart.Replace确实会这样做。
该过程再次相同。我们首先选择场景对象,然后选择预制。再次,我们击中更换,门将用另一个预制板替换。同时,该按钮对门的引用将更新。
Smart.Replace将搜索所替换对象的外部object和component引用。它甚至将搜索lists和arrays以获取可能的参考,并将像描述的那样更新它们。
如果您要替换的场景中有类似的对象,那么一个一个一个一个一个一个乏味的对象。
Smart.Replace提供搜索相似的对象,因此我们可以一次替换任何数量的对象。首先,我们选择场景中的任何对象,然后选择一个预制 - 因此我们可以搜索类似的对象。默认情况下没有过滤器,因此显示了场景中的所有对象。在所有对象都具有相似名称的情况下,按名称搜索非常有效。您也可以搜索组件。
如果我们现在打更换,我们会看到所有对象都会立即替换。如果他们互相参考,他们也将被保留。
为了使插件易于使用,它有一些您应该知道的限制:
component intersection显示了统一组件,但目前无法维持其值。唯一的例外是具有自己的UI的transform组件(见下文)。one component type per object 。如果您的场景对象上有相同类型的多个组件,则只能维护第一个值。其余的将被丢弃。object的外部引用。但是,替换后,外部对象引用将始终指向parent对象。 您可以随时通过[email protected]与我联系。