PrefabUtility这个类是主要用到的,我们来看下里面的常用方法是做什么的。

一、PrefabUtility.SaveAsPrefabAsset()方法

 public static GameObject SaveAsPrefabAsset(GameObject instanceRoot, string assetPath, out bool success);

该方法是把一个gameobject保存成预设体,传参go的根节点,保存到哪个路径下,可以返回一个bool值说明是否保存成功,也会返回该预设体的GameObject。(注意:原gameobject和该预设体是没有关联引用的)。

二、PrefabUtility.SaveAsPrefabAssetAndConnect()方法

 public static GameObject SaveAsPrefabAssetAndConnect(GameObject instanceRoot, string assetPath, InteractionMode action, out bool success);

InteractionMode.AutomatedAction或InteractionMode.UserAction = 1

该方法是把一个gameobject保存成预设体,传参go的根节点,保存到哪个路径下,交互模式有两种,一种是过滤显示确认对话框,防止它记录撤销的历史记录,另一种是允许显示对话框,允许记录撤销的历史记录,可以返回一个bool值说明是否保存成功,也会返回该预设体的GameObject。(注意:原gameobject和该预设体有关联引用)。


三、PrefabUtility.GetPrefabAssetType()方法

public static PrefabAssetType GetPrefabAssetType(UnityEngine.Object componentOrGameObject);

得到预设体的预设体资源类型。
    public enum PrefabAssetType
    {
        NotAPrefab = 0,//正在查询的对象不是预制体的一部分。
        Regular = 1,//正在查询的对象是常规预制体的一部分。
        Model = 2,//正在查询的对象是模型预制件的一部分。
        Variant = 3,//正在查询的对象是预制体变体的一部分。
        MissingAsset = 4//正在查询的对象是预制件实例的一部分,但因为资产缺少无法确定预制件的实际类型。
    }

四、PrefabUtility.GetPrefabInstanceStatus()方法

 public static PrefabInstanceStatus GetPrefabInstanceStatus(UnityEngine.Object componentOrGameObject);

获得预设体实例的状态。参数传入组件或游戏对象。

public enum PrefabInstanceStatus
    {
        NotAPrefab = 0, //该对象不是预制体实例的一部分
        Connected = 1, //预设体实例连接到其预设体
        Disconnected = 2, //预设体实例未连接到其预设体
        MissingAsset = 3 //预设体实例缺少其预设体
    }


五、PrefabUtility.SaveAsPrefabAsset()方法

public static GameObject SaveAsPrefabAsset(GameObject instanceRoot, string assetPath);

使用此函数在给定的 GameObject 的目标路径上创建预设体,包括场景中的任何子项,而不修改原对象。返回已保存的预设体。

该操作不会让游戏对象和预设体关联引用,脚本上如果引用该预设体,也不会丢失引用。类似老的API的ReplacePrefabOptions.ReplaceNameBased的操作。

六、PrefabUtility.SavePrefabAsset()方法

 public static GameObject SavePrefabAsset(GameObject asset);

使用此函数可以保存现有预设体资源 ,在内存中保存到磁盘。参数传入要保存的预设体(不能是预设体实例)。返回保存后的预设体。感觉有点鸡肋的方法。

七、PrefabUtility.SaveAsPrefabAssetAndConnect()方法

public static GameObject SaveAsPrefabAssetAndConnect(GameObject instanceRoot, string assetPath, InteractionMode action);

使用此函数在给定的 GameObject 的给定路径上创建预设体,包括场景中的任何子项, 同时游戏对象和新预设体关联引用。返回预设体。

该方法会使游戏对象和预设体关联引用,并且如果有脚本引用该预设体,预设体的引用不会丢失。类似老的API的ReplacePrefabOptions.ReplaceNameBased和ConnectToPrefab的组合操作。

 

更多推荐