最近看了一下UNITY3D-2018的新Prefab系统,这里做一个记录。目前的情况看下来新Prefab系统还在不断的优化工作流,对于整体的概念应该是敲定下来了。未来应该是在编辑器层面上的优化和编辑细节上的调整。昨天看了UNITY的公开课。还是有点意思的,其中一个比较有趣的一个案例是某个客户由于场景层级太深,导致对某一个Prefab的递归修改卡了几十分钟最后官方出了一版优化到几分钟卡顿。这也从侧面说明了UNITY还是不断对编辑器进行改进的。对于我们来说应该也是一件很友好的事情。这东西需要总结的并不多,作为一个开箱即用的Prefab工作流,我认为UNITY官方处理的还是相当不错,作为美术或者非程序使用都是能很快上手的流程。
需要注意的是新Preafab的嵌套在Assetbundle中可不管你是不是嵌套或者变体,只要出现了多份Prefab就会出现多份资源。
第二个需要注意的是性能问题,你不能有太深的层级在你的prefab上。尽力告知美术让他多做prefab减少层级。
第三个就是尽量在非Assetbundle目录与Resource目录中使用新prefab系统,这样不会出现多份资源重复打包的问题。

概述

我这边也就顺着之前公开课的PPT大概浏览一遍,从个人的角度写一些笔记。因为前有视频后有PPT我就在这里做一些概念上的总结了。
新prefb系统功能如下:

1
2
3
Nested Prefabs(嵌套式预制件)
Prefab Overrides(预制件覆盖/重载)
Prefab Variants(预制件变体)

Nested Prefabs(嵌套式预制件)

嵌套Prefab的做法,让我举例说的话,从程序的角度打个比方。 如果一个prefab看作是一个类的话。那么嵌套prefab就是在一个类里面使用其他的类作为局部变量类似下面:

1
2
3
4
5
class PrefabMain
{
PrefabA a;
PreafaB b;
}

对于a,b变量来说 进行的任何更改对于PrefabMain来说都是没有关系的。

Prefab Overrides(预制件覆盖/重载)

这个概念就不提了,记得我们之前使用UNITY3D在场景里修改实例吗?这就叫Override。

Prefab Variants(预制件变体)

对于这个概念程序应该更好理解了。就像下面写的,下面就是PrefabA变体了,他继承了PrefabMain,如果说现在对 PrefabMain 进行了更改,马上就会体现到所有的继承了 PrefabMain 的Prefab上面去。

1
2
3
4
class PrefabA : PrefabMain
{
PreafaB b;
}