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

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

相关推荐
helloworddm2 分钟前
C++与C#交互 回调封装为await
c++·c#·交互
浅尝辄止;5 分钟前
C# 优雅实现 HttpClient 封装(可直接复用的工具类)
开发语言·c#
CreasyChan29 分钟前
3D游戏数学基础指南
游戏·3d·unity·数学基础
木头软件1 小时前
批量将 Word 文档重命名为其标题
开发语言·c#·word
ERROR:991 小时前
野路子:把海量文档一次性转换成多个PPT
开发语言·人工智能·c#
2501_9307077813 小时前
使用C#代码更改 PowerPoint 幻灯片大小
开发语言·c#·powerpoint
Z_W_H_14 小时前
【C#】C#中值类型和引用类型参数传递的区别
开发语言·c#
用户83562907805115 小时前
使用 C# 高效解析 PDF 文档:文本与表格提取实战指南
后端·c#
rit843249916 小时前
C#实现的远程控制系统
前端·javascript·c#
wuguan_18 小时前
C#中的静态成员、常量和只读变量
开发语言·c#