Unity3D Editor模式下,对预制件prefab的操作

新版Unity中(2017起?),在Editor模式下无法再直接用代码对prefab进行某些操作(比如添加组件等等)。但是对已有组件是可以修改其暴露的值的。

获得预制件路径

  • 预制件在Assets目录中

path=UnityEditor.PrefabUtility.GetPrefabAssetPathOfNearestInstanceRoot(targetPrefab);
targetPrefab若在Resources目录下可以通过Resources.Load加载

  • 预制件在Scene场景中
var prefab = UnityEditor.PrefabUtility.GetPrefabInstanceHandle(targetGameObject);
if (prefab != null)
    { path = UnityEditor.PrefabUtility.GetPrefabAssetPathOfNearestInstanceRoot(prefab); }
else
    { Logger.LogError("此物品没有预制:" + targetGameObject); }

上述获得的path路径格式皆为:Assets/…

在场景中加载预制件

比如在Resources目录下有个预制件,通常游戏中要使用该预制件需要分为两步,即Resources.Load()先加载Prefab,然后Instantiate该Prefab即可获得到其对应的GameObject。
但在Editor下如何把Prefab加载到场景中呢?
使用PrefabUtility.InstantiatePrefab即可,如:var objPrefab = PrefabUtility.InstantiatePrefab(Resources.Load(path)) as GameObject;

修改预制件

通过var newPrefab = PrefabUtility.InstantiatePrefab(prefab) as GameObject;在当前场景中实例化一个预制件物体。
所有的修改,都对newPrefab进行。
修改完毕后,通过PrefabUtility.SaveAsPrefabAsset(newPrefab, prefabPath, out isSuccess);把新修改和原prefab关联。
然后删除newPrefab即可。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

iningwei

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值