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

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

相关推荐
Cool-浩1 小时前
【征文计划】Rokid 语音指令开发教程 【包含工程源码 和体验包APK】
unity·ar·语音识别·rokid·语音指令
QQ12958455041 小时前
C# 如何能够创建一个MVC的WEB项目
c#·mvc
星河队长4 小时前
VS创建C++动态库和C#访问过程
java·c++·c#
William_cl5 小时前
【C# MVC 前置】异步编程 async/await:从 “卡界面” 到 “秒响应” 的 Action 优化指南(附微软官方避坑清单)
microsoft·c#·mvc
yong99905 小时前
C#驱动斑马打印机实现包装自动打印
java·数据库·c#
Jose_lz6 小时前
C#开发学习杂笔(更新中)
开发语言·学习·c#
mingupup6 小时前
WPF/C#:使用Microsoft Agent Framework框架创建一个带有审批功能的终端Agent
c#·wpf
YuanlongWang8 小时前
C# 设计模式——单例模式
单例模式·设计模式·c#
YuanlongWang9 小时前
C#基础——GC(垃圾回收)的工作流程与优化策略
java·jvm·c#
YuanlongWang9 小时前
C# 基础——多态的实现方式
java·c#