Unity 2022.3编辑器脚本如何获取Prefab Variant的基础预制体?
在Unity 2022.3中获取Prefab Variant的基础预制体
在Unity 2022.3版本中,你可以通过PrefabUtility.GetBasePrefab方法直接获取Prefab Variant的基础预制体(即Inspector面板中标注为“Prefab”的字段),具体实现如下:
核心逻辑说明
- 先通过
PrefabUtility.GetPrefabAssetType验证目标对象是否为Prefab Variant - 再调用
PrefabUtility.GetBasePrefab获取其直接继承的基础预制体
代码示例
using UnityEditor; using UnityEngine; public static class PrefabVariantTools { // 添加编辑器菜单,方便快速测试 [MenuItem("Tools/Prefab Variant/Get Base Prefab")] public static void FetchBasePrefab() { var selectedObj = Selection.activeObject; if (selectedObj == null) { Debug.LogError("请先选中一个对象"); return; } // 验证对象是否为Prefab Variant var assetType = PrefabUtility.GetPrefabAssetType(selectedObj); if (assetType != PrefabAssetType.Variant) { Debug.LogError("选中的对象不是Prefab Variant类型"); return; } // 获取基础预制体 var basePrefab = PrefabUtility.GetBasePrefab(selectedObj); if (basePrefab != null) { Debug.Log($"基础预制体:{basePrefab.name}", basePrefab); // 自动选中基础预制体,方便查看 Selection.activeObject = basePrefab; } else { Debug.LogError("该Prefab Variant未设置基础预制体"); } } }
针对场景实例的处理
如果目标是场景中的Prefab Variant实例,需要先获取它对应的预制体资产,再调用GetBasePrefab:
// 假设instance是场景中的Prefab Variant实例 Object prefabAsset = PrefabUtility.GetCorrespondingObjectFromSource(instance); Object basePrefab = PrefabUtility.GetBasePrefab(prefabAsset);
内容的提问来源于stack exchange,提问作者user-id-14900042
相关产品推荐
相关产品推荐

