unity 保存实例到新预制,保存实例到原预制

保存预制,很简单的功能,但是走了弯路,记录一下吧

复制代码
private void SavePrefab(Transform root)
{
    PrefabInstanceStatus status = PrefabUtility.GetPrefabInstanceStatus(Root.gameObject);

    if (status == PrefabInstanceStatus.NotAPrefab)
    {
        // 如果不是预制件,创建一个新的预制件
        string path = EditorUtility.SaveFilePanel("Save prefab", "Assets/", Root.name + ".prefab", "prefab");
        if (path.Length != 0)
        {
            bool suc;
            PrefabUtility.SaveAsPrefabAssetAndConnect(Root.gameObject, path, InteractionMode.UserAction, out suc);
            Debug.Log("suc =" + suc);
        }
    }
    else {
        string prefabPath = PrefabUtility.GetPrefabAssetPathOfNearestInstanceRoot(Root.gameObject);
        Debug.Log($"{prefabPath}");
        PrefabUtility.SaveAsPrefabAssetAndConnect(Root.gameObject, prefabPath, InteractionMode.UserAction);
        //Debug.Log("suc="+ suc);
    }
  
}

如果要保存的Gameobject 本身就是一个预制,不能用下方方法

PrefabUtility.SavePrefabAsset(GameObject root) 这个不是实例才生效,否则报错:

ArgumentException: Can't save a Prefab instance

报错的原因:只要物体拖到场景里,就是一个实例了,所以这个只能用不是实例的物体才可以用

相关推荐
“抚琴”的人12 小时前
【机械视觉】C#+VisionPro联合编程———【六、visionPro连接工业相机设备】
c#·工业相机·visionpro·机械视觉
omegayy14 小时前
Unity 2022.3.x部分Android设备播放视频黑屏问题
android·unity·视频播放·黑屏
FAREWELL0007514 小时前
C#核心学习(七)面向对象--封装(6)C#中的拓展方法与运算符重载: 让代码更“聪明”的魔法
学习·c#·面向对象·运算符重载·oop·拓展方法
CodeCraft Studio15 小时前
Excel处理控件Spire.XLS系列教程:C# 合并、或取消合并 Excel 单元格
前端·c#·excel
勘察加熊人16 小时前
forms实现连连看
c#
hvinsion16 小时前
PPT助手:一款集计时、远程控制与多屏切换于一身的PPT辅助工具
c#·powerpoint·ppt·ppt助手·ppt翻页
weixin_3077791318 小时前
使用C#实现从Hive的CREATE TABLE语句中提取分区字段名和数据类型
开发语言·数据仓库·hive·c#
时光追逐者18 小时前
在 Blazor 中使用 Chart.js 快速创建数据可视化图表
开发语言·javascript·信息可视化·c#·.net·blazor
与火星的孩子对话19 小时前
Unity3D开发AI桌面精灵/宠物系列 【三】 语音识别 ASR 技术、语音转文本多平台 - 支持科大讯飞、百度等 C# 开发
人工智能·unity·c#·游戏引擎·语音识别·宠物
response_L19 小时前
国产系统统信uos和麒麟v10在线打开word给表格赋值
java·c#·word·信创·在线编辑