跳过主要内容
更新日期:

如何在Unity中使用预制件

作者:

Matt Bird写过各种废话,但他喜欢为Unity编写教程。

作为统一的基石之一,预制件对于任何基于统一的游戏的创建都是必不可少的。作为一种在开发过程中不断弹出的拖放资源,预置是学习如何使用Unity时首先需要了解的内容之一。

什么是预制件?

Unity环境中的预制件是带有特定组件、值和子对象集合的预包装游戏对象。无论何时在游戏中创建一个预制实例,它都与相同的属性绑定在一起,然后可以在不改变基础预制的情况下进行操作和更改。预制件在检查员的项目资产中找到。

我自己拍摄的截图。Unity由Unity Technologies拥有和开发。

我自己拍摄的截图。Unity由Unity Technologies拥有和开发。

以上面的图片为例。在Project窗口中,您可以看到许多资产。突出的资产,HubGuy,是一个预制件。如果你将1000份HubGuy拖进游戏中,每一份都将拥有Sprite Renderer和Animator组件,并且这些组件彼此都是相同的。

假设你想要一个和原来的HubGuy稍微不同的HubGuy。你可以做一个不同的预制来反映变化,像这样:

第二个游戏对象HubGuyPink被稍微改变了一下,所以精灵看起来是粉色的。这个新的游戏对象随后被保存为一个单独的预制件,在项目窗口中产生了两个不同的预制件:HubGuy和HubGuyPink。此后,您可以根据需要制作尽可能多的HubGuy预制件,每个预制件都有不同的颜色、组件、值等组合。

如何创建预制件?

在Unity中创建预制是这个过程中最简单的部分。一旦你设置了你想要作为预制件的游戏对象,在左侧的层次结构中选择它…

. . .并将其拖到“项目”窗口中选择的文件夹中。这将在你的文件中创建预制。然后你可以拖拽预制到层次结构或直接到场景中创建预制的实例。(注意,如果你将预制放到层次中,它将直接移动到预制的预设坐标。)

了解预设仅存在于项目文件中是很重要的。每当你将预制件拖放到游戏中,它就会变成一个实例预制。你可以在运行时改变Instance的值,而在游戏运行时通常不可能改变Prefab的值。(这也不是一个好主意。)

是什么让预制件有用?

除了复制的简单性,Prefabs的优点在于它允许大规模的改变,而无需破坏游戏对象的单个实例。举个例子,假设你在屏幕上有一大组HubGuyPinks,但是你想把它们换成不同的粉红色。

要改变的精灵太多了。你可以像上面一样在项目窗口中选择预制面板,然后在检查面板中改变它们的值,而不是单独地打乱它们。在这样做,你的预制件从浅粉色的阴影…

. . .更黑暗的东西。实例中的变化是直接的,可能比表面的变化更剧烈。例如,你可以在Prefab中添加一个新组件——也许是一个你创建的自定义脚本——然后每个Prefab都会立即拥有这个组件。

Prefabs的改变也可以是双向的。让我们假设你正在致力于一个特定的游戏对象,并决定将你所做的更改应用到其他预制中。如果你在检查器中查看游戏对象值的顶部,你会看到一个小条,当你查看预制件时,这个小条是没有的。

有三个选项:选择、恢复和应用。选择将你导向项目窗口中的游戏对象预制件,这非常简单。然而,恢复和应用功能要强大得多,在这种情况下,您需要应用对预制件的更改。如果你点击Apply,它会改变预设以反映游戏对象的当前状态,从而传递给预设的每个实例。

另一方面,假设您一直在修改的Instance不再符合您的喜好。你可以删除它,创建一个新的实例,然后重新开始…或者你可以去回复按钮,并将其更改回预制的值。

保存的值

预制件也很好,因为它们允许你保存对你的游戏很重要的一次性、可变的游戏对象。这种情况出现的频率可能比你想象的要高。

举个例子来说吧,你正在制作一款RPG,每个角色的值都被附加到组件脚本中的GameObject中。你可能只会在游戏中对角色进行一次迭代,最终会对这些价值观进行大量修改。根据玩家角色的复杂性,他们可能会拥有一打或更多的脚本。

如果你不小心删除了游戏对象会发生什么?好吧,希望你可以纠正错误并继续下去,但你很容易忽视并失去大量的进展。通过创建并定期更新角色的预制件,你可以轻松地在项目中保存游戏对象,允许你在旧的副本被删除时快速取出一个新的副本。可以把Prefabs看作是某种备份文件。

这也不仅仅适用于角色。理想情况下,你应该制作游戏中几乎所有东西的预制件。摄像机,用户界面,背景,任何在背景中执行脚本的不可见游戏对象。你可能永远不会使用Prefabs,但是保持一个整洁的目录,经常更新的重要游戏对象列表将会在出现问题时帮助你避免一些大麻烦。(他们会。他们总是做的。)

关于预制件的警告

因为Prefabs的变化非常剧烈,所以在应用这些变化时很容易出错。让我们假设你正在制作一个预制件的实例,但意外地选择了预制件本身。你输入的每一个值都会传递给Instances,你可能不会注意到这些变化,直到你进入运行时,你的游戏变成了一个故障怪物。

另一方面,当你只想在单个实例中反映这些更改时,很容易进入工作流程,并意外地将更改应用到每个预制件。一个简单的即时撤销将改变Prefab,但如果你在注意到错误之前进行了30次操作,那么修复内容可能需要一段时间。游戏创造是一项累人的工作,你应该经常假设自己会搞砸它。

关于预制件的另一个警告

最后一件事!与Unity中的所有资产一样,你也可以删除Prefabs。并不是每一个预制件都会按照你想要的方式工作。在项目窗口中选择预制件并点击删除。然后你会得到一个警告,你不能撤销这个动作,并且预制件将永久消失。确认这一点,预制件就消失了。

声音公平吗?好吧,再次强调,很容易搞砸,不小心删除了你想要保留的东西,尤其是当你很匆忙的时候。很可能每个有经验的Unity开发者都删除了至少一次他们想要保留的预制。幸运的是,有一种方法可以撤消此操作,假设您手边有一个Prefab的实例。

快速浏览一下等级制度。来自Prefabs的实例在这里以蓝色显示,而没有Prefabs的游戏对象则以黑色显示。然而,其中3个gameobject呈现粉红红色。这些是作为Prefabs创建的游戏对象,但现在已经失去了这种联系。它们不会立即被删除,而是以一种孤立的状态出现。如果你点击其中一个实例,顶部的预制条将会显示“Missing”。

幸运的是,所有Prefab的值都将保留在这些游戏对象中,所以为了取回Prefab,你所需要做的就是将其中一个实例拖放到项目窗口中。这将本质上复活预制。(尽管其他实例将保持孤立,你将不得不删除它们,并创建新的实例连接回新的Prefab。你不可能赢得所有人。)

此内容是准确和真实的作者的知识,并不是要取代正规和个性化的意见,从合格的专业人士。

相关文章

Baidu