本章节我们来讲解如何编辑预制体文件。这里介绍三种打开编辑预制件的方式。第一就是通过预制件的实例游戏对象的Inspector检视面板上面的预制件“打开”按钮。
第二就是在Project工程面板中选中预制件文件(Cube.prefab),然后在Inspector检视面板中点击“打开预制件”。
第三就是在Project工程面板中双击预制件文件(Cube.prefab)。
上面的三种方式打开后,都是下面的效果图样子。
Hierarchy层次面板会变成这样。
Scene场景视图会变成这样。
预制体的Inspector检视面板是这样的。
这里就是我们之前第一次创建“Cube”游戏对象的所有属性,包括添加到它身上的“CubePrefabTest”脚本文件等等,如果有需要的话,我们可以在这里编辑这个预制体。请注意的是,修改预制件资源时,更改将反映在其所有游戏对象实例中。这个应该很容易理解,我们将“根”修改了,那么由“根”产生的游戏对象自然也要同步修改。还有另一种修改预制体的方式,就是通过它的实例进行修改,然后同步到预制体上面。操作步骤也非常简单。我们之间将一个游戏对象拖拽到Project视图中就创建了预制体,那么我们拖拽预制体到场景中呢?自然就是实例化一个游戏对象出来啊。
请注意,这种将预制体拖拽到场景中的,与我们之前使用代码生成的,还是有区别的,我们发现在Hierarchy视图中的游戏对象的名称是蓝色的,这跟我们创建预制体的时候相似。我们点击场景中的“Cube”立方体,查看它的Inspector检视视图。与普通游戏对象相比,预制件实例的Inspector 有三个额外的控件:Open、Select 和 Overrides。这就是本章节开始位置打开预制体的方式。
Open 按钮就是打开编辑预制件资源窗口(上面介绍的第一种方式),修改后同步到其所有实例,这个跟我们直接编辑预制体文件是一样的。Select 按钮在 Project 窗口中选择用于生成此实例的预制件资源文件。Overrides 下拉窗口显示预制件实例上的所有覆盖(Overrides)。还允许将实例的覆盖应用于预制件资源,或将实例上的覆盖恢复为预制件资源上的值。首先,我们要理解什么是覆盖?因为我们的所有实例都来源于预制体,因此这些实例的所有属性都是相同的。有时候,我们需要修改个别实例的一些属性,比如修改它的位置,添加新的组件等等,这些就属于覆盖。我们可以对预制件实例进行修改(覆盖),那么我们自然也可以将这个修改(覆盖)应用到预制体资源上面。例如,我们给“Cube”游戏对象添加一个“Rigidbody”组件(点击Add Component按钮后,在搜索框中输入“ri”,然后在下面的下拉框中找到“Rigidbody”组件即可),如下所示
这个组件的作用,我们暂且不讲解。
此时,我们点击上面的“Overrides”,就可以看到会显示“Rigidbody”的差异,
如果我们点击“Rigidbody”的话,就会再次弹出一个窗户,显示该组件的内容,同时上面会有两个按钮,一个是“Revert”(还原),另一个是“Apply”(应用)。
我们点击“Apply”按钮,就会将这个改动应用到我们的预制体上面。如果我们改动比较多,我们可以直接点击“Apply All”按钮来讲所有的修改全部应用到预制体上面。点击应用按钮完毕之后,我们在“Project”视图中单击/双击“Cube.prefab”资源文件,然后查看它的Inspector检视面板,就能看到我们刚刚添加的“Rigidbody”组件。
这说明,我们预制体资源文件同步修改成功了。这里我们总结一下,预制体有两种编辑方式,第一种就是直接编辑预制体文件本身,第二种就是通过它的实例(游戏对象)编辑并同步到预制体。
最后再介绍一下预制件变体。在Project工程面板中,选中预制件资源文件,然后右键,选择“Create”->“Prefab Variant”。就可以创建一个预制件变体。预制件变体是基于预制件生成的,它的特点是修改预制件变体的内容不会影响预制体。当然,也可以手动将修改应用到预制件上。它的作用主要用来做预制体的差异化处理,这样可以适用更多的复杂情况。