首页 > Unity3D频道 > 【Unity杂文】 > Unity研究院之Prefab和GameObject的正向和逆向查找引用
2014
05-05

Unity研究院之Prefab和GameObject的正向和逆向查找引用


          我发现很多美工兄弟都爱问程序Unity3d为什么总丢材质? 我不排除U3d有BUG的情况下会丢材质?但是其实很多时候是人为操作而引起的。

1.不保存就在上传

这个操作太恐怖了,切记!!在 U3D里面你无论操作了什么,当你要上传svn的时候一定要先保存场景,Ctrl+S 切记切记!!如果不保存就上传很有可能就会丢材质。

2.我的电脑明明没事,怎么你哪里就丢材质?

我发现一个很有意思的现象,每次走到美术电脑前看它的svn工程时,我都会发现各种的“黄叹号”整个工程严重的冲突。然后程序和美术的对话就是:“这资源有用没?没用删了, 我重新更新。。。” 哈哈哈 我觉得可能只有程序员才会对冲突非常敏感吧,但我觉得这件事不能怪美术,美术是很抽象的东西,不向程序要具体到少一个分号就无法进行了。

3.管理好材质贴图

如果项目不管理好材质和贴图,后起你会发现有很多完全一样的图片只是名子不一样,但是还都在使用中。。这个很有可能是好几个美术同时在做,这样会造成资源的浪费。

4.特效丢材质

我举个实际的例子,我们项目场景和特效是两个人来做。之前总遇到场景特效莫名其妙丢材质的问题。原因就是做特效的人把特效修改了,但是做场景的又不知道,因为可能这个特效在好多场景上都在使用中。

 如下图所示,在Preiject下面方的Prefab 如果拖入Hierarchy视图中,它俩是具有关联关系的,如果你直接在Project视图中修改了Prefab那么所有Hierarchy视图中关联它的Prefab都会得到修改。小改动这样是没问题的,如果发生一些比较大的改动,那么Hierarchy视图中Prefab可能就会丢失或者坏掉。但是假如你有很多场景都引用同一个Prefab,这么多场景会很难找到的。

Unity研究院之Prefab和GameObject的正向和逆向查找引用 - 雨松MOMO程序研究院 - 1

正向在Hierarch视图中选择一个prefab,然后在右侧Inspector视图中点击Select会自动找到Project视图中的Prefab对象。那么反向如何从Project视图中找到Hierarchy视图中引用的Prefab呢?

如下图所示,Unity3d做了一个功能,在Project视图中选择一个Prefab,然后右键选择Find References In Scene ,那么此时Unity会自动帮你在当前场景中找到Hierarchy视图中引用这个Prefab的GameObject。

Unity研究院之Prefab和GameObject的正向和逆向查找引用 - 雨松MOMO程序研究院 - 2

但是这个方法有点局限性,就是它只能找到当前场景的,假设你的这个Prefab在很多场景中都引用了,那么这样是找不到了,为了美术我决定写一个小小的工具,嘿嘿。

 如下图所示,我就可以找到哪个场景引用了这个Prefab。 这里我没有用GameObject和Prefab的名子来判断,我觉得最好也不要用名字,因为Hierarchy视图中的名子完全可以随意修改的,如果被改了的话就肯定找不到了,而且场景那么多完全有重名的情况。

Unity研究院之Prefab和GameObject的正向和逆向查找引用 - 雨松MOMO程序研究院 - 3

是不是很简单呢?嘿嘿。

或者还有个办法,就是运行时动态的载入Prefab,但是有些场景特效其实万全没有任何意义,仅仅是展示而已,程序也无需对它进行操作。

有了这个小工具,那么以后美术改完Prefab的时候,运行一下连带的看看某些场景上是否正常的显示了?嘿嘿嘿嘿。

最后编辑:
作者:雨松MOMO
专注移动互联网,Unity3D游戏开发
捐 赠写博客不易,如果您想请我喝一杯星巴克的话?就进来看吧!

Unity研究院之Prefab和GameObject的正向和逆向查找引用》有 13 条评论

  1. yuewq 说:

    请问大神,我现在用unity 2019.1.2f1 想找到所有使用“ToggleGroup”的组件的prefab怎么设置条件是组件

  2. Greensue 说:

    大神,我想获取所有enable场景中的prefab,通过您的代码先获取所有gameobject,再通过gameobject找到AssetDatabase.GetAssetPath(parentObject),只能得到场景中一部分prefab文件的路径,但是一些prefab,(例如,在hierachy视图中,一个prefab子目录下的prefab)是得不到的,怎样做才能得到场景hierachy视图下所有的prefab的在Asset下的路径呢?

  3. 苏莉微 说:

    谢谢,好用!已学习!

  4. 陆宇杨 说:

    确实好用。我的问题是一个player的prefab,估计有头,有手,所以一个引用提示多条,估计和模型设计有关,而特效没有复杂的层级?所以能用这个?
    Unity研究院之Prefab和GameObject的正向和逆向查找引用 - 雨松MOMO程序研究院 - 1

  5. 八龙_Yin 说:

    请问momo大神,能否选定一张png图片,然后检索出所有用到这张图片的预设呢?

  6. tett 说:

    大神,能不能写个类似prefeb develop的插件呢

  7. 王选易 说:

    第二个问题深有感触啊,美术对Unity的使用错误会给项目带来很多困扰

  8. blue 说:

    点击查找的时候,游戏崩溃掉了。不知道是什么引起的

  9. EditorUtility里面找不到GetPrefabParent这个方法哦

  10. Ian--Zhang 说:

    我把代码敲了一遍,没有错误,为什么还是不能直接使用呢?

    • 雨松MOMO 说:

      不会吧? 代码其实并不多?核心的地方 就这两行。 UnityEngine.Object parentObject = EditorUtility.GetPrefabParent(go); string path = AssetDatabase.GetAssetPath(parentObject);

  11. 小鱼 说:

    momo大神什么时候你的资源可以下载啊,现在怎么下载不了?

留下一个回复

你的email不会被公开。