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

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

相关推荐
Triumph++11 小时前
电器模C#汇控电子继块驱动(Modbus协议)
c#·visual studio·c#串口通信
沉默金鱼11 小时前
Unity实用技能-格式化format文字
ui·unity·游戏引擎
jyy_9911 小时前
通过网页地址打开unity的exe程序,并传参
unity
咩图14 小时前
C#创建AI项目
开发语言·人工智能·c#
周杰伦fans15 小时前
C# - Task 是什么?想象一下你在餐厅点餐
服务器·开发语言·c#
一只小小汤圆17 小时前
简化点集合 道格拉斯-普克算法(Douglas-Peucker Algorithm)
c#·occ
scixing17 小时前
函数式编程 第八讲 循环者,递归也
开发语言·c#
屠夫18 小时前
SqlSugar的简单使用
c#
qq_205279051 天前
Unity TileMap 使用经验
unity·游戏引擎
心灵宝贝1 天前
Mac Unity 2018.dmg游戏工具 安装步骤 简单易懂教程(附安装包)
macos·unity·游戏引擎