Unity3d编辑器模式下创建和替换Prefab
最近在项目中需要开发一套地图数据生成编辑器,记录自己在这个过程中使用的一些好用的创建和替换Prefab的方法。
PrefabUtility.CreatePrefab(localPath,obj) 这个方法可以将场景中的GameObject对象创建成Prefab,官方文档中有给出例子:
using UnityEngine;
using UnityEditor;public class Example : EditorWindow
{//Creates a new menu (Examples) with a menu item (Create Prefab)[MenuItem("Examples/Create Prefab")]static void CreatePrefab(){//Keep track of the currently selected GameObject(s)GameObject[] objectArray = Selection.gameObjects;//Loop through every GameObject in the array aboveforeach (GameObject gameObject in objectArray){//Set the path as within the Assets folder, and name it as the GameObject's name with the .prefab formatstring localPath = "Assets/" + gameObject.name + ".prefab";//Check if the Prefab and/or name already exists at the pathif (AssetDatabase.LoadAssetAtPath(localPath, typeof(GameObject))){//Create dialog to ask if User is sure they want to overwrite existing Prefabif (EditorUtility.DisplayDialog("Are you sure?","The Prefab already exists. Do you want to overwrite it?","Yes","No"))//If the user presses the yes button, create the Prefab{CreateNew(gameObject, localPath);}}//If the name doesn't exist, create the new Prefabelse{Debug.Log(gameObject.name + " is not a Prefab, will convert");CreateNew(gameObject, localPath);}}}// Disable the menu item if no selection is in place[MenuItem("Examples/Create Prefab", true)]static bool ValidateCreatePrefab(){return Selection.activeGameObject != null;}static void CreateNew(GameObject obj, string localPath){//Create a new Prefab at the path givenObject prefab = PrefabUtility.CreatePrefab(localPath, obj);PrefabUtility.ReplacePrefab(obj, prefab, ReplacePrefabOptions.ConnectToPrefab);}
}
PrefabUtility.InstantiatePrefab(obj) 这个方法是可以克隆出一个Prefab到场景中。
string assetPath = "Assets/Prefabs/test.prefab";var prefab = AssetDatabase.LoadAssetAtPath <GameObject>(assetPath);GameObject clone = PrefabUtility.InstantiatePrefab(prefab) as GameObject;
如果是场景中的Prefab预制对象的引用丢失,可以使用这个方法来克隆出对象,引用同样可用。
Unity3d编辑器模式下创建和替换Prefab相关推荐
- Unity动作表情工具(编辑器模式下一边播动作一边播表情)
一直忙于学习技术和工作好久没写博客 这次分享一下我写的一个动作表情工具 先说一下需求:美术把一帧帧表情图导出来,一张张排好序号,然后放到编辑器里面打开一个工具界面可以选动作,同时切换对应的表情,在编辑 ...
- UNITY编辑器模式下static变量的坑
UNITY编辑器模式下static变量的坑 在unity中写编辑器扩展工具,如在编辑器中加个菜单,点击这个菜单项时执行打包功能. 类如下,其中的静态变量,如果每次进来不清空,则LIST会越来越大,打包 ...
- php读写w,PHP如何在读写(w +)模式下创建临时文件?,_PHP_ 少侠科技
详细内容 PHP中的tmpfile()函数是一个内置函数,用于在读写(w+)模式下创建一个具有唯一名称的临时文件. 使用tmpfile()函数创建的文件在使用fclose()关闭或没有对文件句柄的剩余 ...
- Unity3D学习笔记之六创建更多的Prefab
在写完第五篇后,因为不知名的原因,我突然不能够上传100KB以上的图片在博客中了.等了几天还是这样,所以我用PS把图片的分辨率一张张调低,让图片的大小都在100左右,将积攒了四篇的学习笔 ...
- Hive在SQL标准权限模式下创建UDF失败的问题排查
环境: CDH 5.16 Hive 1.1.0 已开启Kerberos Hive 授权使用SQL StandardsBased Authorization模式(以下简称SSBA模式) 症状表现: 在编 ...
- Unity3D编辑器扩展--自定义创建圆锥体
前言 这几天琢磨着开发个个人作品的时候,发现原来Unity3D官方没有提供圆锥体的创建功能,就自己做了个编辑器扩展.鉴于之前搜索Mesh编程的时候很少有博客把自己的算法讲清楚,这里我抛砖引玉,尽我所能 ...
- 实现Unity编辑器模式下的旋转
最近在做一个模型展示的项目,我的想法是根据滑动屏幕的x方向差值和Y方向的差值,来根据世界坐标下的X轴和Y轴进行旋转,但是实习时候总是有一些卡顿.在观察unity编辑器下的旋转之后,发现编辑器下的旋转非 ...
- 学习OceanBase :如何在MySQL模式下创建一个用户?
本节主要介绍如何创建一个用户. 谁可以创建用户 数据库在运行过程中,往往需要创建不同的用户,并为用户赋予相应的权限,一般被授予 CREATE USER 权限的用户可以创建用户. 由于 CREATE U ...
- linux vi模式替换,linux基础命令之:vi模式下查找和替换
一.查找 查找命令 /pattern :向下查找pattern匹配字符串 ?pattern:向上查找pattern匹配字符串 使用了查找命令之后,使用如下两个键快速查找: n:按照同一方向继续查找 N ...
最新文章
- 基础知识——测试代码(七)
- 元空间和直接内存_JVM探秘:Java内存区域
- JLBH示例4 – QuickFix vs ChronicleFix基准化
- 关于Application.Lock和Lock(obj)
- 企业网站 源码 e-mail_临汾网站制作,B2B软件哪家好
- SAP License:SAP S/4HANA Cloud [ERP 云]
- 敏捷开发一千零一问系列之十二:敏捷实施的步骤?
- dockerfile实例
- 手机计算机字体变大,手机字体怎么调大
- “在禁用 UAC 时,无法激活此应用”问题解决
- 手把手教你批量保存花瓣图片到同一目录的技巧
- 粗浅看Struts2和Hibernate框架
- 永久域名存在吗?永久域名注册流程是什么样的?
- CSS3nbsp;Transitionnbsp;Transformnbsp;Animat…
- CocoaPods深入一点
- 谷歌浏览器不安全的连接牵扯的系统缺陷
- 成为一个15K的软件测试工程师的基本要求
- 手机前缀带字幕滚动筛选
- dockers安装redis
- JAVA 时间差8个小时的问题