在一個專案中,一定會有一堆 Scrpit、Prefab、音效檔、美術圖等等的物件。
而專案可能因為經常翻新或者重構,導致出現一堆 "可能不要的"、"可能沒被引用的"、"可能沒用處的" 的舊物件。
想要把它移除,但是又當心這些舊物件依然被引用著,如果貿然移除的,可能會導致一堆 Missing 的錯誤發生。
又或者會出現一堆無法預知的錯誤,所以就這樣子,這些舊物件又被保留下來了,時間一久專案更大的時候,這些舊物件就更不敢移除了。
 
久而久之,專案容量就會非常的大!且非常的混雜!
 
 
其實 Unity 有提供一項功能,可以幫助開發者去搜尋該物件被誰引用了。
 
例如,我有一個腳本,名稱為 "MyScript",我將該腳本拖曳到場景,掛載到 GameObject 物件身上。

image01.jpg

 
 
這時候我可以在我想要搜尋的腳本上,按下滑鼠右鍵,選擇 "Find References In Scene"。

image02.jpg

 
 
或者直接在場景的搜尋框內輸入 "ref:" + 路徑 + 檔名 + 副檔名也是可以的。

image03.jpg

 
 
搜尋後可以看到場景上只要有引用到 "MyScript" 腳本的物件,就會被搜尋出來。

image04.jpg

 
 
但是該功能只要是有間接引用的,都會一併被搜尋出來。
例如說,我再加上一個腳本,名稱為 "Test",該腳本很簡單,只是提供一個 public 的欄位,可以指定 GameObject 進去而已。
 
using UnityEngine;

public class Test : MonoBehaviour
{
    public GameObject gobj;
}
 
 
 
再將該腳本掛載至場景上的 Camera 裡。

image05.jpg

 
 
接著將 GameObject 物件指定進去。

image06.jpg

 
 
這時候再搜尋一次 "ref:MyScript.cs" 的話,會發現連 Camera 也一併被搜尋出來了!

image07.jpg

這是因為 GameObject 物件有引用到 MyScript 腳本,而 Camera 的腳本中因為掛載了 GameObject 物件,也算間接的引用到 MyScript 腳本。
所以才會一併被搜尋出來。
 
 
而且這種方法同樣適用於 Asset 的搜尋框。
我們先將 GameObject 拖曳至 Asset 視窗裡,建立成 prefab。

image08.jpg

 
 
再將 "ref:MyScript.cs" 這段複製到 Asset 搜尋框裡去執行。

image09.jpg

這時候會發現,GameObject 被搜尋出來了!
不過他的搜尋規則跟場景搜尋一樣,只要有間接引用到的物件,也會一併被搜尋出來。
 
但有一點需要注意!搜尋速度是跟專案大小有關,如果你的專案很大的話,搜尋時可能會讓整個 Unity 都沒反應,不過請不要緊張,耐心的等待幾分鐘後就行了!
 
 
是不是很方便呢?
如果想知道該物件被誰引用了,只需要用這方法,馬上就可以知道了。
而當你有舊的物件想要移除時,也可以使用 Asset 的搜尋框去搜尋該物件,若只搜尋到自己或者無結果時,表示 Asset 裡已經沒物件去引用到了。
這時候再去專案中的各場景去搜尋,如果都搜尋不到的話,那就可以安心的移除囉~
 
 
PS:其實在 Asset 搜尋,只能搜到 Prefab 最上面的那層物件,底下的子物件是搜尋不到的,所以這邊我是建議開一個新的場景,點選 Favorites -> All Prefabs,把所有的 Prefab 都拉到場景上,用場景的方式去搜尋,會比較精準一點!
 
arrow
arrow
    文章標籤
    Unity ref:
    全站熱搜

    岳 發表在 痞客邦 留言(0) 人氣()