項目升級到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 是在資產中的資源,如果直接賦值在屬性面板上就是藍色的小方塊,如下圖所示:
如果要加載進遊戲,是需要把這個物體進行克隆。不過我目前的需求就是獲取預製,所以到這一步就可以了。