项目升级到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 是在资产中的资源,如果直接赋值在属性面板上就是蓝色的小方块,如下图所示:
如果要加载进游戏,是需要把这个物体进行克隆。不过我目前的需求就是获取预制,所以到这一步就可以了。