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

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

相关推荐
.NET修仙日记43 分钟前
第一章:从零开始构建你的第一个C#/.NET应用程序
c#·.net·.net core
地狱为王3 小时前
Unity使用PP-MattingV2实现人像分割
unity·游戏引擎
在路上看风景5 小时前
7.1 阴影贴图
unity
lrh30256 小时前
Unity 高效 ListView GridView
unity·高效·复用·uilistview·uigridview
m5655bj8 小时前
如何使用 Python 转换 Excel 工作表到 PDF 文档
开发语言·c#·excel
技术支持者python,php8 小时前
SUB设备电子狗加密狗开发
c#
星夜泊客9 小时前
[特殊字符] Unity 对象判空机制混乱原因总结(上篇)
unity·游戏引擎
唐青枫10 小时前
循环插入太慢?试试 C#.NET SqlBulkCopy,一次导入上百万数据
c#·.net
SmoothSailingT15 小时前
C#窗体—子窗体获取父窗体TextBox框的值
c#·窗体
ysdysyn17 小时前
C# 进程管理实战:检查与启动EXE程序的完整指南
开发语言·c#