【unity实用技能】unity编辑器工具之加载预制(Prefab)和场景(Scene)

在unity里做打包或者帮策划美术做工具的时候经常会需要把Prefab拉出来或者场景打开做检验工作

其实这个在上一篇在ui打包的文章里有提到,不过重点不同,上篇重点是打包,这篇的重点是把里面的一个小知识点拉出来讲一讲

接下来就讲讲两者分别怎么做

一、把预制Prefab拉出来

就是像我们平时把预制拉到这个地方

1.首先是获取你选中的那个Prefab(如果是有其他需求,比如默认目录下的所有文件等,就不这样处理,不过大同小异)

GameObject[] selectGameObjects = Selection.gameObjects;   

既然是一个数组就foreach一下。

2.通过AssetDatabase的接口获取资源路径并判断一下选中的文件是否是目标文件夹下的指定后缀文件

string path = AssetDatabase.GetAssetPath(selectGO);
if(path.StartsWith("Resources/XXX"))
{
    if(path.EndsWith(".prefab"))
    {
    }
}  

确认无误开始下一步

3.拉到Hierarchy里

GameObject uiInstance = PrefabUtility.InstantiatePrefab(selGb) as GameObject  

这样就等于拉到窗口里了

就可以开始进行各种操作

这里提醒一下一个类似的接口

PrefabUtility.CreatePrefab
这个是把GameObject生成Prefab放到硬盘里,也就是与上面相反的过程。

4.删除实例

上面的实例是uiInstance,所以要把这个实例删掉,也就是从Hierarchy里删掉

UnityEngine.Object.DestroyImmediate(uiInstance);  

更新Prefab(相当于点了个apply)

PrefabUtility.ReplacePrefab(instance,go,ReplacePrefabOptions.ConnectToPrefab);  

二、把Scene打开

有时候美术出完场景需要做一下校准或检查资源,需要程序帮忙写个工具,这时候就需要把Scene打开

1.还是跟上面一样把选中的场景获取

Object[] selectGameObjects = Selection.objects;  

这里不一样的是,获取的是Object而不是GameObject
2.同样是获取场景路径并检测名字

string path = AssetDatabase.GetAssetPath(selectGO);
if(path.StartsWith("Resources/XXX"))
{
    if(path.EndsWith(".scene"))
    {
    }
}  

同样,需要改检测的后缀名为scene

3.打开场景Scene

这里才是主要差别,用的接口不一样

EditorSceneManager.OpenScene(selGbPath, OpenSceneMode.Single);
Scene currScene = EditorSceneManager.GetSceneByPath(selGbPath);  

可以看到,先把Scene打开,再通过路径接口获取Scene
这两个步骤缺一不可

4.做你想要的操作

你要打开一个场景,无非是要在里面检查一些东西或者要修改里面的一些GameObject里的一些值。

其实在你调用EditorSceneManager.OpenScene(selGbPath, OpenSceneMode.Single);以后,你的当前场景已经是你想要的场景了

所以你要找你的GameObject只需要GameObject go = GameObject.Find(“name”);就可以了

5.保存场景

如果你对你的场景打开后不需要做任何操作,你甚至在第三步的时候都不用Scene currScene = EditorSceneManager.GetSceneByPath(selGbPath);

去获取这个场景。

但毕竟你一般不会这么无聊只打开不做任何操作,所以第二步还是需要获取。

然后调用

EditorSceneManager.SaveScene(currScene);  

这样就完成了。

这里不需要像上面实例化GameObject一样去删除,场景打开就打开把,同时也就打开一个

原文地址:http://blog.51cto.com/13638120/2084913

时间: 2024-10-17 13:50:31

【unity实用技能】unity编辑器工具之加载预制(Prefab)和场景(Scene)的相关文章

【小松教你手游开发】【unity实用技能】角色头部跟随镜头旋转

这个在端游上比较场景,在角色展示的时候,当摄像头在角色身边上下左右旋转时,角色头部跟随镜头旋转.如天涯明月刀等. 这个在手游上比较少见,不过实现也没什么区别. 首先一般情况下,找到模型的头部节点,直接用lookAt指向camera就可以了,不过一般需求不会这么简单. 比如说,超过头部扭动极限,头部需要插值回到原始点:当镜头从外部回到极限内,需要插值回来.这时候lookat就没法使用. 更有情况,头部本身坐标系不在世界坐标轴上, 可能旋转了90多或者输出的prefab就是歪的等等,这些情况都没办法

【小松教你手游开发】【unity实用技能】Unity内存申请和释放(转自tnqiang)

这里先声明转自http://www.jianshu.com/p/b37ee8cea04c 1.资源类型 GameObject, Transform, Mesh, Texture, Material, Shader, Script和各种其他Assets. 2.资源创建方式 静态引用,在脚本中加一个public GameObject变量,在Inspector面板中拖一个prefab到该变量上,然后在需要引用的地方Instantiate: Resource.Load,资源需要放在Assets/Reso

unity 3D里有两种动态加载机制

unity 3D里有两种动态加载机制: 一是Resources.Load: 一是通过AssetBundle: 其实两者本质上没有什么区别.Resources.Load就是从一个缺省打进程序包里的AssetBundle里加载资源,而一般AssetBundle文件需要你自己创建,运行时动态加载,可以指定路径和来源的.其实场景里所有静态的对象也有这么一个加载过程,只是Unity后台替你自动完成了. 1.    AssetBundles是什么? 在一些大型的网络游戏,或者加载比较多的一些场景时,如果要等

微信小程序-工具无法加载本地模拟开发服务的解决办法

微信小程序开发工具出现如下问题: 因为网络代理软件或者 VPN 影响,工具无法加载本地模拟开发服务  请尝试以下任一解决方案1.关闭相关网络代理软件,重新编译成功后,再启动相关网络代理软件: 2.配置相关软件不针对 *.appservice.open.weixin.qq.com 和 *.debug.open.weixin.qq.com 进行代理: 3.配置相关软件不针对 开发者工具 做代理 但是根本没用任何代理,找了很多方法,最终解决: 设置windows防火墙,允许微信web开发者工具使用网络

【小松教你手游开发】【unity实用技能】unity发包优化(android一键发包)

unity本身的发包其实还是挺方便的,国外的游戏基本都用unity本身的发包. 但在国内的游戏有这么多渠道,这个迭代的速度的情况下,就需要一套更高效的发包方式. 接下来讲具体步骤,如果你们项目有热更新会更麻烦一点. 发包优化的目标是做到一键发包,一般发包机会是一台独立的机子,所以 第一步,更新svn 第二步,配置打包信息.根据不同渠道接入不同sdk 第三步,build apk. 因为我们项目暂时还是测试,所以还没做根据不同渠道接入不同sdk.具体思路是写个xml,在上面填写各种配置信息,版本号,

Unity 利用UGUI打包图集,动态加载sprite资源

今天做了一个UI界面,这个界面是好友界面,该界面上有若干个好友item. 需要对每个tem的头像对象(image)动态显示对应的头像.尝试利用UGUI的图集来加载,具体实现如下: 1.首先,需要知道SpriteAtlas的功能,可以保存一些关于要打包进去的sprite的设置.(详细参数设置的意义有待进一步研究),其中的Objects For Packing可以关联到需要打包进这个已创建图集的Sprite,或者文件夹,或者texture.目前这里的做法是关联到了文件夹. 2.此时,unity已经给

百度编辑器Ueditor 初始化加载内容失败解决办法

项目上有用到百度文本编辑器ueditor,在页面加载的时候初始化编辑器内容时候,使用 $.document.ready(function() { UE.getEditor('editor').setContent('欢迎光临'); }) setContent方法无法加载内容,提示编辑器为空,后来想想,可能是编辑器还没有加载完就执行此脚本导致的.后在网上找资料,可以判断ueditor编辑器完成加载后再加载内容: 核心内容如下 var editor_a = new baidu.editor.ui.E

工具:内存加载dll

文件不落地,更隐蔽一些,但是加载c语言运行时的dll会有问题,需要静态链接的dll才行,不知为何. 代码开源: https://github.com/xjp342023125/Code 测试代码路径: Code\trunk\Src\Test\MemLoadDll 就是导入表手动加载和重定位表的修复.

灵活实用require.js,让JS加载速度更流畅

当一个网页引入很多js文件,网页加载会变得很慢,并且js文件存在依赖性,有时候颠倒顺序就不能运行了,这很影响用户体验. require.js解决了异步加载,提高网页的加载,同时依赖顺序的js可以用数组排序. 第一部加载require.js放到目录的js子目录下: <script src="js/require.js"></script> 需要加一个参数 defer async="true" 表示这个文件需要异步加载 defer兼容IE版本 需