一:前言

PrefabUtility是一个静态类,用于Prefab的相关处理


二:代码实现

——SavePrefabAsset
保存一个预制体,只能保存一个工程目录下的预制体

using UnityEditor;
using UnityEngine;public class Test : MonoBehaviour
{[MenuItem("Tools/PrefabTest")]private static void PrefabTest(){GameObject go = AssetDatabase.LoadAssetAtPath<GameObject>("Assets/Prefabs/test.prefab");PrefabUtility.SavePrefabAsset(go);}
}

——SaveAsPrefabAsset
 保存成一个预制体,只能保存一个场景中的游戏物体

using UnityEditor;
using UnityEngine;public class Test : MonoBehaviour
{[MenuItem("Tools/PrefabTest")]private static void PrefabTest(){string savePath = "Assets/Prefabs/go.prefab";PrefabUtility.SaveAsPrefabAsset(Selection.activeGameObject, savePath);}
}

——SaveAsPrefabAssetAndConnect
 保存成一个预制体并关联,只能保存一个场景中的游戏物体

using UnityEditor;
using UnityEngine;public class Test : MonoBehaviour
{[MenuItem("Tools/PrefabTest")]private static void PrefabTest(){string savePath = "Assets/Prefabs/go.prefab";PrefabUtility.SaveAsPrefabAssetAndConnect(Selection.activeGameObject, savePath, InteractionMode.AutomatedAction);}
}

——GetPrefabAssetPathOfNearestInstanceRoot
得到此预制体的根预制体所在路径

using UnityEditor;
using UnityEngine;public class Test : MonoBehaviour
{[MenuItem("Tools/PrefabTest")]private static void PrefabTest(){string str = PrefabUtility.GetPrefabAssetPathOfNearestInstanceRoot(Selection.activeObject);Debug.Log("path:" + str);}
}

——GetPrefabAssetType
得到预制体类型, NotAPrefab、Regular、Model、Variant、MissingAsset

using UnityEditor;
using UnityEngine;public class Test : MonoBehaviour
{[MenuItem("Tools/PrefabTest")]private static void PrefabTest(){PrefabAssetType type = PrefabUtility.GetPrefabAssetType(Selection.activeObject);Debug.Log("type:" + type);}
}

——GetNearestPrefabInstanceRoot
得到此预制体的根预制体游戏物体,只能传入一个场景中的游戏物体

using UnityEditor;
using UnityEngine;public class Test : MonoBehaviour
{[MenuItem("Tools/PrefabTest")]private static void PrefabTest(){GameObject go = PrefabUtility.GetNearestPrefabInstanceRoot(Selection.activeObject);Debug.Log("GameObject:" + go);}
}

——UnpackPrefabInstance
打断预制体关联,只能打断一个场景中的游戏物体

using UnityEditor;
using UnityEngine;public class Test : MonoBehaviour
{[MenuItem("Tools/PrefabTest")]private static void PrefabTest(){PrefabUtility.UnpackPrefabInstance(Selection.activeGameObject, PrefabUnpackMode.Completely, InteractionMode.AutomatedAction);Debug.Log("GameObject:" + go);}
}

——prefabInstanceUpdated
预制体更新时的回调(Apply时)

using UnityEditor;
using UnityEngine;public class Test : MonoBehaviour
{public int a;[InitializeOnLoadMethod]static void PrefabTest(){PrefabUtility.prefabInstanceUpdated = OnPrefabUpdate;}static void OnPrefabUpdate(GameObject instance){Debug.Log(instance);}
}

三:常用功能

——一键保存场景中所有预制体

using UnityEditor;
using UnityEngine;public class Test : MonoBehaviour
{[MenuItem("Tools/SaveAll")]private static void SaveAll(){GameObject[] gos = FindObjectsOfType<GameObject>();foreach (var temp in gos){PrefabAssetType type = PrefabUtility.GetPrefabAssetType(temp);if (type == PrefabAssetType.Regular){GameObject rootGo = PrefabUtility.GetNearestPrefabInstanceRoot(temp);string path = PrefabUtility.GetPrefabAssetPathOfNearestInstanceRoot(temp);PrefabUtility.SaveAsPrefabAssetAndConnect(rootGo, path, InteractionMode.AutomatedAction);}}AssetDatabase.Refresh();}
}

Unity编辑器扩展——PrefabUtility相关推荐

  1. 【Unity编辑器扩展】(二)PSD转UGUI Prefab, 图层解析和碎图导出

    书接上回:[Unity编辑器扩展](一)PSD转UGUI Prefab, Aspose.PSD和Harmony库的使用_TopGames的博客-CSDN博客 工具使用预览: 工具目标: 1. 实现将p ...

  2. 【Unity编辑器扩展】(三)PSD转UGUI Prefab, 一键拼UI解放美术/程序(完结)

    工具效果: 第一步,把psd图层转换为可编辑的节点树,并自动解析UI类型.自动绑定UI子元素: 第二步, 点击"生成UIForm"按钮生成UI预制体 (若有UI类型遗漏可在下拉菜单 ...

  3. Unity编辑器扩展之EditorWindow

    Unity编辑器扩展之EditorWindow 继承这个类的编辑器脚本可以用来创建一个编辑器窗口,类似Inspector窗口 若要在这个类中添加一些控件,可以使用GUI和GUILayout控件,还可以 ...

  4. Unity 编辑器扩展菜单

    Unity 编辑器扩展菜单 目录 Unity 编辑器扩展菜单 一.MenuItem 特性 菜单栏扩展 1.创建多级菜单 2.创建可使用快捷键的菜单项 3.创建可被勾选的菜单项 4.检查菜单是否使用 5 ...

  5. Unity编辑器扩展: 程序化打图集工具

    开始前的声明:该案例中图集所使用图片资源均来源于网络,仅限于学习使用 一.前言 关于编辑器扩展相关的知识,在前面的两篇内容中做了详细的描述,链接地址: 第一篇 :Unity编辑器扩展 UI控件篇 第二 ...

  6. 【Unity编辑器扩展实践】、查找所有引用该图片的预制体

    上一篇Unity编辑器扩展实践二.通过代码查找所有预制中已经查到到所有的预制体了. 然后我们就可以用这些预制体做一些其他的操作了,比如查找该预制的资源引用.可以直接遍历预制,找到预制里面的所有Imag ...

  7. 【Unity编辑器扩展】(一)PSD转UGUI Prefab, Aspose.PSD和Harmony库的使用

    [Unity编辑器扩展](二)PSD转UGUI Prefab, 图层解析和碎图导出_psd导入unity_TopGames的博客-CSDN博客 [Unity编辑器扩展](三)PSD转UGUI Pref ...

  8. Unity编辑器扩展 UI控件篇

    前摇 :认识编辑器扩展的必要性 由于各种各样的原因,无论是移动端亦或是主机/PC端,进几年的发行的游戏体量是越来越大.通常来说大体量的游戏开发需要一套很成熟完善的工作流,亦或说有很强的工业化的能力,像 ...

  9. Unity编辑器扩展Texture显示选择框

    学习NGUI插件的时候,突然间有一个问题为什么它这些属性可以通过弹出窗口来选中呢? 而我自己写的组件只能使用手动拖放的方式=.=. Unity开发了组件Inspector视图扩展API,如果我们要写插 ...

最新文章

  1. 区块链项目实战 - 使用以太坊/智能合约solidity,全栈开发区块链借贷记账小应用,含完整源码
  2. Cent OS – Tomcat 7 - 集群
  3. xctf php2,XCTF PHP2
  4. (149)System Verilog接口(interface)连线待测模块
  5. Kubernetes v1.10.x HA 全手动安装教程(TL;DR)
  6. oracle行号排序问题
  7. idea设置Maven本地仓库
  8. vivado中实现VGA驱动学习笔记
  9. 基于ROS+镭神激光雷达+amcl定位、导航的智能车学习记录
  10. 央联众商APP告诉你怎样来“理”,然后才有那个“财”
  11. Python报错 TypeError: super(type, obj): obj must be an instance or subtype of type
  12. Discuz!x1.5实现在线文档(doc、ppt、pdf)播放
  13. OpenSea合约深度解析——atomicMatch_ 篇
  14. VBA打开已加密的Excel文件
  15. Fail2Ban 简介与使用
  16. 堡垒主机内控管理平台产品方案介绍
  17. BUUCTF-pwn(15)
  18. ath79 spi报错:ath79-spi 1f000000.spi: cs1 = max 1
  19. python bs4 find_all_网络爬虫(三)BS4提取之find_all
  20. Ubuntu下U盘没有不能新建粘贴文件 报错 [sdf] Write cache: disabled, read cache: enabled, doesn't support DPO or FUA

热门文章

  1. 洗地机到底好不好用,洗地机好还是扫地机器人好
  2. 《JavaWeb篇》02.JDBC看这一篇就够了
  3. 深度linux怎样设置显卡,在deepin stable系统中配置Intel+Nvidia双显卡的方法
  4. 演讲笔记 适合所有人的实用程序生成 PCG
  5. mysql数据库三层架构_数据库的三层架构
  6. 编写MQTTClient测试程序,和PC端运行的MQTT服务程序进行数据收发
  7. 稳定的韩国高防服务器如何选择?
  8. kinect2.0体感游戏开发
  9. bat生成vbs通过注册表禁用或启用USB端口
  10. 微调(linear probing和 full finetune)技巧