You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity 2022.3编辑器脚本如何获取Prefab Variant的基础预制体?

在Unity 2022.3中获取Prefab Variant的基础预制体

在Unity 2022.3版本中,你可以通过PrefabUtility.GetBasePrefab方法直接获取Prefab Variant的基础预制体(即Inspector面板中标注为“Prefab”的字段),具体实现如下:

核心逻辑说明

  1. 先通过PrefabUtility.GetPrefabAssetType验证目标对象是否为Prefab Variant
  2. 再调用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 19:01:03