Unity2018 : 預製體及其路徑

項目升級到Unity 2018 之後, 發現很多舊的API都過時了,比如預製體獲取路徑這一部分就沒了。今天翻了翻Unity的代碼,把新找的API做個記錄。

 

通過預製獲取其路徑

這算是一個常用功能了,這個功能分兩種情況:

1、所選擇的物體在資產(Project)中

此時直接調用如下API即可獲得:

 Path = UnityEditor.PrefabUtility.GetPrefabAssetPathOfNearestInstanceRoot(targetGameObject);

2、所選擇的物體在層級(Hierachy)中

此時需要先將其連接到資產面板中,然後獲取其路徑:

var prefab = UnityEditor.PrefabUtility.GetPrefabInstanceHandle(targetGameObject);
if (prefab != null)
    { Path = UnityEditor.PrefabUtility.GetPrefabAssetPathOfNearestInstanceRoot(prefab); }
else
    { Logger.LogError("此物品沒有預製:" + targetGameObject); }

 

注意,無論用哪種方法,獲取到的路徑都是在相對位置下、帶後綴名的路徑。例如:

Assets/Resources/aaa/bbb/ccc.prefab

這個路徑一般需要二次處理,因爲他並不能通過 Resources.Load 加載出來。這裏我選擇用字符串來進行處理:

Path = Path.Substring(17, Path.Length - 24);

最後得到的結果就是 : aaa/bbb/ccc 這樣的形式,就可以直接通過 Resources.Load 加載。

 

通過資源路徑獲取預製

這一部分與之前變化不大,目前我只找到在 Resources 目錄下的資源加載方法:

GameObject obj = Resources.Load<GameObject>(Path);

這裏獲取到的 GameObject 是在資產中的資源,如果直接賦值在屬性面板上就是藍色的小方塊,如下圖所示:

如果要加載進遊戲,是需要把這個物體進行克隆。不過我目前的需求就是獲取預製,所以到這一步就可以了。

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章