Unity2018.3 Nested Prefab Mode 嵌套预制体
Unity2018.3开始,新增了一个Prefab Mode,俗称嵌套预制体,在Prefab里套Prefab。实际应用中多少会有些坑。
- 资源打包,Assetbundle一直都有依赖的问题。所以嵌套的Prefab理所当然要预加载。
- 脚本修改Prefab,很多生产环境下都会有代码处理Prefab的情况,而这次新增的Prefab Mode,与之前的编辑模式是不同的,所以升级后需做兼容性修改。
- 进入Prefab Mode就是双击Assets里的Prefab文件。
- 详细教程 https://unity.com/prefabs
关注点 Prefab Mode
Scene Mode | Prefab Mode | |
---|---|---|
Hierarchy 里操作的对象本质 | Prefab Instance 实例 | Assets里的UnityEngine.Object文件 |
Apply 保存过程 | 从Instance写入到Asset里的Prefab文件 | 直接操作Assets里的Prefab文件 |
SetDirty 脚本修改Prefab上的对象 | EditorUtility.SetDirty(Object) | 暂无(目前U3D问答上很多人在问) |
设置场景Dirty | EditorSceneManager.GetActiveScene() | PrefabStageUtility.GetCurrentPrefabStage().scene) |
Apply时的回调 | PrefabUtility.prefabInstanceUpdated | PrefabStage.prefabSaving |
实际使用总结
- 官网上宣称的Prefab Mode,其实在代码里的引用叫做Prefab Stage
- 通过脚本来操作Prefab的时候,需要注意PrefabStageUtility.GetCurrentPrefabStage()优先判断是否在Prefab Mode
- Prefab Mode下,如果通过代码脚本修改对象属性,一定要注意EditorSceneManager.MarkSceneDirty的调用。
- 注意Scene View右上角的Auto Save按钮