如何充分利用Unity新预制件工作流程的预制件重写,如何简化开发流程

如何充分利用Unity新预制件工作流程的预制件重写,如何简化开发流程

Unity 2018.3 中新的预制件工作流程已经发布。 本文将帮助您了解如何充分利用 Unity 新预制工作流程的预制重写、嵌套和变体功能。

Unity 2018.3正式发布预制件嵌套功能。 我们可以使用全新的预制件模式编辑器来独立编辑预制件。 新的预制件工作流程将更快,并在开发过程中为我们节省大量时间。

在本文中,我们将学习如何使用预制件和新的预制件编辑流程,它分为三个部分:预制件模式、预制件嵌套和预制件变体。

学习准备

下图是项目窗口的文件夹结构:

unity 实例化预制物体_unity导出预制体_unity获取预制体的组件

每个文件夹的内容如下:

了解现场

首先,我们打开Assets\RW\Scenes\Factory文件夹下的Factory场景。 场景是工厂区的一部分unity 实例化预制物体,随机生成的家具会通过传送带从左到右运送。

我们可以看到两个 UI 按钮,Increase 和 Decrease,它们会增加或减少家具的生成速度和传送带的速度。 我们单击“播放”按钮来运行场景。

我们可以看到,如下图所示,传送带在移动,按钮功能正常,但没有生成任何对象。

unity 实例化预制物体_unity获取预制体的组件_unity导出预制体

生成的内容将从预设的游戏对象列表中随机选择。 我们可以通过在hierarchy窗口中选择Furniture对象来查看对象的检查窗口,注意Furniture Spawner组件的Furniture Prefabs列表。

该组件在 TimeBetweenSpawns 设置的时间过去后随机生成家具预制件。

unity 实例化预制物体_unity导出预制体_unity获取预制体的组件

现在我们了解了场景,让我们来看看新的预制工作流程的核心概念以及它如何简化开发过程。

创建预制件

Unity中的预制件是预先配置好的可重复使用的游戏对象,我们可以在场景中创建预制件并将其保存在项目中。

在创建预制件时,我们使用需要的组件,在场景中创建一个游戏对象并进行适当的配置,然后将游戏对象拖到项目窗口中,在项目中保存为预制件。 创建后,我们可以实例化和克隆预制件。 预制件有很多用途,是 Unity 开发的重要组成部分。

创建后unity 实例化预制物体,游戏对象的名称颜色和图标都会变为蓝色,表示它已转换为预制件。

以下是该项目的使用示例:

制作预制件后,我们可以将其从层次结构中移除,并在 Unity 项目的任何位置使用它。

unity导出预制体_unity获取预制体的组件_unity 实例化预制物体

运行场景,我们刚刚添加的预制件将生成并在传送带上从左向右移动。

unity获取预制体的组件_unity导出预制体_unity 实例化预制物体

现在我们已经了解了如何制作基本的预制件,让我们开始探索预制件工作流程的新核心功能。

预制模式

新的预制件模式是一种专用的预制件编辑模式,允许我们单独打开和编辑预制件。 相比于将预制件拖拽编辑到场景中的旧方法,新的预制件模式将节省大量时间和工作。

我们有两种方式进入预制模式:

双击项目窗口中的预制件。

如果预制件是当前场景的一部分,我们会在Hierarchy窗口中看到游戏对象旁边有一个小箭头,点击这个箭头会进入预制件模式。

使用上述任何一种方法都可以在场景窗口中打开预制模式。 请注意,此时层次结构仅显示属于所选预制件的游戏对象。

unity导出预制体_unity 实例化预制物体_unity获取预制体的组件

单击 Hierarchy 中 GameObject 左侧的左箭头以退出 Prefab 模式。 我们可以发现进入和退出预制模式的过程非常简单快捷。

预制模式的自动保存功能

我们回到场景,在hierarchy窗口中选中Furniture对象音乐音效,在检查窗口中将Furniture Prefabs的Size值设置为0,从而清空列表中的所有对象。

我们通过将 Table 1 预制件从 Assets\RW\Prefabs\Furniture 文件夹拖到列表中来添加它。

unity 实例化预制物体_unity获取预制体的组件_unity导出预制体

运行场景,现在只有表 1 的实例会在游戏窗口的传送带上生成。

unity 实例化预制物体_unity导出预制体_unity获取预制体的组件

当我们运行场景时,双击项目窗口中的Table 1,以预制模式打开,然后增加或减少预制的Scale值。

我们会发现,当我们调整预制件的属性时,游戏窗口的实时环境中每个新生成的游戏对象都会相应地发生变化。

这种实时更新的效果得益于预制模式下新增的Auto Save自动保存功能。 我们可以根据需要通过场景视图右上角的复选框来开启或关闭该功能。

unity获取预制体的组件_unity导出预制体_unity 实例化预制物体

覆盖预制件

除了便捷的Auto Save自动保存功能外,新的prefab workflow还允许我们重写prefabs,即对指定的prefab实例进行特殊修改,而这些修改不属于对应的prefab资源。

通过使用属性覆盖,我们可以创建具有相同特征但在某些条件下有所不同的预制件。 换句话说,覆盖允许修改预制实例的某些属性并保存更改,同时允许更新未修改的属性并与对预制资源所做的更改保持同步。

这是覆盖预制件的示例:

unity 实例化预制物体_unity导出预制体_unity获取预制体的组件

unity导出预制体_unity 实例化预制物体_unity获取预制体的组件

以下是如何覆盖场景中的预制件的示例。 当场景中有 GameObjects 的实例时,我们想要修改预制件的特定属性,我们可以在不影响场景中的整体预制件实例的情况下这样做。

在进入下一部分学习之前,我们先删除hierarchy窗口中的Table 1对象。

预制嵌套

预制件嵌套功能允许您将预制件实例作为子项包含在其他预制件中,同时仍保持与其自身预制件资产的关联。 这个功能可以让游戏更加模块化,非常有用。

这是使用预制件嵌套功能的示例:

unity 实例化预制物体_unity导出预制体_unity获取预制体的组件

unity导出预制体_unity 实例化预制物体_unity获取预制体的组件

如果现在启用Auto Save,我们会发现虽然Table 1和Table 2是两个独立的prefab,但是它们上面的桌布尺寸会同时发生变化,因为它们都是继承自TableCloth prefab。

我们回到 Hierarchy 窗口,删除场景中所有的预制件表 1、表 2 和 TableCloth 游戏对象,以保持项目整洁。

这是另一个用法示例:

unity导出预制体_unity 实例化预制物体_unity获取预制体的组件

删除层次结构中不必要的 Arrow 预制实例以保持项目整洁。

这是对如何在Unity新的预制件工作流程中使用预制件嵌套功能的简单介绍。 在旧的预制件系统中,如果预制件是大量游戏对象的一部分,则必须手动选择该预制件的所有实例才能使更改生效。

创建嵌套预制件的能力允许我们制作独立的模块,然后将其添加为其他预制件的子级,这样我们只需要编辑主预制件一次,所做的更改将在整个项目中生效。

预制变体

预制变体允许我们从预制资源创建新的预制。

预制变体所基于的预制件称为基础,预制变体可以包含对基础预制件的覆盖,但仍会接收对未覆盖的属性的更新。

在关于预制件覆盖的部分中,我们学习了如何覆盖场景中预制件实例的特定属性,但有时我们可能希望创建两个或多个预制件的变体地图场景,使它们在整个项目中都可用,但同时它们具有一些不同于基础预制件的属性,例如材料。

我们可以通过创建继承基础预制件所有属性但可以单独调整特定属性的预制件变体来做到这一点。

下面是预制变体的示例用法。 现在项目中的 UI 按钮 IncreaseButton 和 DecreaseButton 是两个独立的预制件,但是它们有很多相同的属性,使用其中一个预制件创建变体可以使维护过程更容易。

unity获取预制体的组件_unity导出预制体_unity 实例化预制物体

我们可以点击检查窗口中的Overrides下拉窗口,查看基础预制件的哪些属性被DecreaseButton覆盖了。

unity 实例化预制物体_unity导出预制体_unity获取预制体的组件

变体中未被覆盖的修改仍将随着基础预制件相应属性的更改而更新。 为了证明这一点,我们可以执行以下操作:

我们退出预制件编辑模式,删除层级窗口中不需要的 DecreaseButton 预制件。 选择Furniture游戏对象,将NewChair、Table 2和Chair 1预制件添加到Furniture Prefabs列表中,然后运行场景,效果如下图所示。

unity 实例化预制物体_unity获取预制体的组件_unity导出预制体

概括

更多Unity教程,请访问Unity官方中文论坛()。

官方活动

Unite Shanghai 2019暖冬特惠门票限量发售

2019年5月10-12日在上海,Unite大会强势回归。 暖冬特惠票正式开售,购票即可获得指定Asset Store资源商城21种优质资源50折优惠券。 [了解更多...]

购票链接:

Unity全球学生发展挑战赛火热进行中(倒计时10天)

Unity 向全球学生发起 - Unity 全球学生发展挑战赛,寻找世界上最具创造力和自我表达能力的学生开发团队。 [了解更多...]

活动地址:

活动 | Unity for Humanity 2019 挑战赛

参加 Unity for Humanity Challenge,向我们展示您的工作如何改变世界。 [了解更多...]

活动地址: