人气 212

[综合技术] Nested Prefab--prefab终于有父子关系了! [复制链接]

九艺网 2019-5-2 15:37:35

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
在Unity2018.3的众多更新中,大家可能最为关注的就是Nested Prefab这个功能了。

在2018.3之前的版本,如果我们把一个prefab A拖到另一个prefab B的hirerachy时,让A成为B的子,那么A就不再是一个prefab的instance了。这就为我们在构建自己的场景时带来了一定的麻烦。比如,有一个prefab”门“,当把它拖动到某个prefab”房子“的hirerachy中时,这个“门”就成为了prefab“房子”的一部分。当我们改变prefab“门”某个属性时,房子中“门”的属性是不会跟着更改的。

而2018.3中的Nested Prefab就是为了解决类似的问题。不仅如此,2018.3还针对prefab的工作流进行了优化提升。
注:本文不是教程,所以不会涉及到怎么操作。其实那些操作都非常简单,更重要的是概念,实际操作一下要比看教程的效率更高(或者看一下Manual)
新的prefab工作流主要包含了以下4点:

  • Prefab Mode
  • Nested Prefab
  • Prefab Override
  • Prefab Variants

Prefab Mode
简单的说,Prefab Mode是专门用来编辑prefab的。在之前的版本中,我们想要编辑prefab,通常都是把它拖到某一个场景中,编辑,再apply回prefab这么一个流程。而新的Prefab Mode本质上和之前的版本中差不多,只不过Prefab Mode用的场景是一个内置的场景(你甚至可以替换这个内置场景)。但是这个Prefab Mode的加入却可以使我们的场景或环境更加方便和整洁。因为它避免了编辑prefab对当前场景可能的污染效果。你可能会说一个专为编辑prefab而建的场景就可以解决此问题;但是这就带了其他问题,比如需要在不同场景中切换,这个工作流其实并不高效。而进入Prefab Mode只需要点击Hirerachy窗口中game object右侧的箭头就可以了。这让我们的编辑更加方便。


                               
登录/注册后可看大图

点击红框的箭头就可以进入Prefab Mode

当然,我们仍然可以继续使用之前的编辑方式。

Nested Prefab
Nested Prefab就是我们通常说的嵌套prefab。简单的说就是一个prefab可以成为另一个prefab的子。

Prefab Override
override意味着对prefab的重载或者修改。当我们想把这些修改apply到prefab时,Nested Prefab跟之前有很大的区别。之前的系统之要apply到当前的prefab就好了,不会有什么问题;但是Nested Prefab则会遇到所有权问题。

让我们举个例子:还是房子和门的例子。有一个单独的prefab“门”,它的颜色是白色的;有一个prefab“红房子”,还有一个prefab“蓝房子”,它们的hirerachy下面都有一个prefab“门”。为了搭配颜色(虽然这样不一定好看),我们想把“红房子”的门改为红色,而把“蓝房子”的门改为蓝色。但是无论我们把“门”改为红色还是蓝色,都是做不到的。貌似只能建两个prefab"门"来满足这个需求。

Unity为了解决类似的问题,而设定了override level的概念(尽管我觉得更像是所有权)。Prefab Override可以选择apply到任意层次的某个prefab上。还是上面的例子:要满足上面例子的需求,我们就可以把颜色的修改apply到房子上,也就是说,当我们把一个nesting prefab“房子”的“门”的颜色改变时,我们可以选择:
  • 把这个修改apply到这个独立的prefab“门”上:此时两个“房子”的门都会改变颜色
  • 把颜色修改apply到这个nesting prefab“红房子”(或“蓝房子”)上:此时只有“红房子”的”门“会发生改变,而单独的prefab"门"及另一个“房子”的门是不会发生变化的。

Prefab Variants
Prefab Variants实现的是一个继承关系。还是举个例子说明一下:我们的游戏中有3种机器狗敌人,它们的颜色都不一样。
在Nested Prefab之前的版本中,我们要实现这个需求只能创建3个prefab"机器狗",分别设定好它们的颜色。OK,现在看上去一切都还好。但是有一天我们需要改动3个“机器狗”的大小,把它们整体放大一倍,麻烦就来了:我们需要把3个prefab的scale全都修改一遍。如果你觉得3个prefab还好,那30个、300个呢?
Prefab Variants就是为了解决类似的问题的。为了解决上面的问题,我们可以先创建一个prefab"机器狗",它是我们的basic prefab。然后从这个prefab创建3个prefab variant,这实际上就建立了一个继承关系:3个variants继承自一个basic prefab。我们可以分别把prefab variant”机器狗“的颜色改为3种不同的颜色。当我们遇到改动3个”机器狗“的大小时,我们只需要改动basic prefab的大小就可以了。

新的Nested Prefab提供了非常强大的功能。如果你有什么建议,欢迎留言。


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

QQ|手机版|小黑屋|九艺游戏动画论坛 ( 津ICP备2022000452号-1 )

GMT+8, 2024-3-29 22:30 , Processed in 0.065156 second(s), 23 queries .

Powered by Discuz! X3.4  © 2001-2017 Discuz Team.