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(Path);

这里获取到的 GameObject 是在资产中的资源,如果直接赋值在属性面板上就是蓝色的小方块,如下图所示:

Unity2018 : 预制体及其路径_第1张图片

如果要加载进游戏,是需要把这个物体进行克隆。不过我目前的需求就是获取预制,所以到这一步就可以了。

 

 

 

 

 

你可能感兴趣的:(Unity)