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

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

相关推荐
格林威5 小时前
C# 相机Burst模式图像采集:使用相机内存配合OpenCvSharp和Halcon实现短时间的高速采集的方法
开发语言·人工智能·数码相机·计算机视觉·c#·视觉检测·工业相机
J总裁的小芒果6 小时前
参数过多-分批传参
c#
典典分享指南6 小时前
短视频分镜提示词:让 AI 出片的产品口播
java·c#·bash·composer·symfony
Z5998178418 小时前
c#软件开发学习笔记--WPF(Canvas、数据绑定、MVVM模式、值转换器)
笔记·学习·c#
zhchyun20088 小时前
# 【Unity UI 进阶】仿 Element UI 打造企业级 Unity UI 组件库(06)
ui·unity·游戏引擎
淡海水9 小时前
05-03-栈队列-PriorityQueue-TElement-TPriority-NET6优先队列语义与四叉堆实现
服务器·前端·c#·priorityqueue·clr·telement
Behaviour14 小时前
Unity游戏HybridCLR 热更新接入实战
游戏·unity·游戏引擎
leonkay1 天前
C# 特性(Attribute)——【1】基础讲解
开发语言·青少年编程·面试·c#·.net·个人开发
CSDN_RTKLIB1 天前
数据库七大符号表
c#
leonkay1 天前
C# 特性(Attribute)——【2】工业设备参数框架设计
经验分享·面试·架构·c#·学习方法·设计