什么方法可以找到场景下所有的unity gameobjectt

更多公众号:Imgtec全球最领先的GPU架构 PowerVR;
世界上最高效的CPU架构MIPS;
全球多媒体通信技术的领先企业,致力于开发和授权用于图形、视频和显示、嵌入式处理、多标准通信和互连以及跨平台V.VoIP & VoLTE领域的顶尖处理器解决方案。最新文章对这篇文章不满意?您可以继续搜索:百度:搜狗:感谢您阅读干货|Unity 5.3新功能:多场景编辑,本文可能来自网络,如果侵犯了您的相关权益,请联系管理员。QQ:使Resources类中的Load方法向场景中导入资源库中的资源
使Resources类中的Load方法向场景中导入资源库中的资源
2、在Project窗口中新建一个文件夹,命名为Resources.要使用Resources类来从资源库中导入资源,需要把资源放在Resources目录下,该目录可以包含子目录,也可以直接把资源放在它下面。3.使用Resources类中的Load方法向场景中导入资源库中的资源,并使用GameObject类中的Instantiate函数实例化资源对象。var instance:GameObject=Instantiate(Pre,transform.position,transform.rotation);& & & &&//Instantiate用法,注意参数& & & &&//Pre&&用来克隆的Prefabs& & & &&//transform.position&&脚本绑定对象的位置 就像this.transform….& & & &&//transform.rotation&&脚本绑定对象的角度 就像this.transform….Instantiate()是个克隆方法,用来动态创建游戏对象。Resources.Load()方法会加载资源根目录下的Resources文件夹里的资源
发表评论:
TA的推荐TA的最新馆藏[转]&程序写累了,就来玩玩酷跑小游戏吧,嘿嘿。
雨松MOMO送你一首歌曲,嘿嘿。
Unity研究院之Prefab和GameObject的正向和逆向查找引用
Unity研究院之Prefab和GameObject的正向和逆向查找引用
围观25517次
编辑日期: 字体:
我发现很多美工兄弟都爱问程序Unity3d为什么总丢材质? 我不排除U3d有BUG的情况下会丢材质?但是其实很多时候是人为操作而引起的。
1.不保存就在上传
这个操作太恐怖了,切记!!在 U3D里面你无论操作了什么,当你要上传svn的时候一定要先保存场景,Ctrl+S 切记切记!!如果不保存就上传很有可能就会丢材质。
2.我的电脑明明没事,怎么你哪里就丢材质?
我发现一个很有意思的现象,每次走到美术电脑前看它的svn工程时,我都会发现各种的“黄叹号”整个工程严重的冲突。然后程序和美术的对话就是:“这资源有用没?没用删了, 我重新更新。。。” 哈哈哈 我觉得可能只有程序员才会对冲突非常敏感吧,但我觉得这件事不能怪美术,美术是很抽象的东西,不向程序要具体到少一个分号就无法进行了。
3.管理好材质贴图
如果项目不管理好材质和贴图,后起你会发现有很多完全一样的图片只是名子不一样,但是还都在使用中。。这个很有可能是好几个美术同时在做,这样会造成资源的浪费。
4.特效丢材质
我举个实际的例子,我们项目场景和特效是两个人来做。之前总遇到场景特效莫名其妙丢材质的问题。原因就是做特效的人把特效修改了,但是做场景的又不知道,因为可能这个特效在好多场景上都在使用中。
如下图所示,在Preiject下面方的Prefab 如果拖入Hierarchy视图中,它俩是具有关联关系的,如果你直接在Project视图中修改了Prefab那么所有Hierarchy视图中关联它的Prefab都会得到修改。小改动这样是没问题的,如果发生一些比较大的改动,那么Hierarchy视图中Prefab可能就会丢失或者坏掉。但是假如你有很多场景都引用同一个Prefab,这么多场景会很难找到的。
正向在Hierarch视图中选择一个prefab,然后在右侧Inspector视图中点击Select会自动找到Project视图中的Prefab对象。那么反向如何从Project视图中找到Hierarchy视图中引用的Prefab呢?
如下图所示,Unity3d做了一个功能,在Project视图中选择一个Prefab,然后右键选择Find References In Scene ,那么此时Unity会自动帮你在当前场景中找到Hierarchy视图中引用这个Prefab的GameObject。
但是这个方法有点局限性,就是它只能找到当前场景的,假设你的这个Prefab在很多场景中都引用了,那么这样是找不到了,为了美术我决定写一个小小的工具,嘿嘿。
12345678910111213141516171819202122232425262728293031323334353637383940414243444546
[MenuItem("Assets/Check Prefab Use ?")] private static void OnSearchForReferences() { &&//确保鼠标右键选择的是一个Prefab
if(Selection.gameObjects.Length != 1)
//遍历所有游戏场景
foreach(EditorBuildSettingsScene scene in EditorBuildSettings.scenes)
if(scene.enabled)
&&//打开场景
EditorApplication.OpenScene(scene.path);
//获取场景中的所有游戏对象
GameObject []gos = (GameObject[])FindObjectsOfType(typeof(GameObject));
foreach(GameObject go&&in gos)
&&//判断GameObject是否为一个Prefab的引用
if(PrefabUtility.GetPrefabType(go)&&== PrefabType.PrefabInstance)
UnityEngine.Object parentObject = EditorUtility.GetPrefabParent(go);
string path = AssetDatabase.GetAssetPath(parentObject);
//判断GameObject的Prefab是否和右键选择的Prefab是同一路径。
if(path == AssetDatabase.GetAssetPath(Selection.activeGameObject))
//输出场景名,以及Prefab引用的路径
Debug.Log(scene.path&&+ "&&" + GetGameObjectPath(go));
} } public static string GetGameObjectPath(GameObject obj) {
string path = "/" + obj.name;
while (obj.transform.parent != null)
obj = obj.transform.parent.gameObject;
path = "/" + obj.name + path;
return path; }
如下图所示,我就可以找到哪个场景引用了这个Prefab。 这里我没有用GameObject和Prefab的名子来判断,我觉得最好也不要用名字,因为Hierarchy视图中的名子完全可以随意修改的,如果被改了的话就肯定找不到了,而且场景那么多完全有重名的情况。
是不是很简单呢?嘿嘿。
或者还有个办法,就是运行时动态的载入Prefab,但是有些场景特效其实万全没有任何意义,仅仅是展示而已,程序也无需对它进行操作。
有了这个小工具,那么以后美术改完Prefab的时候,运行一下连带的看看某些场景上是否正常的显示了?嘿嘿嘿嘿。
本文固定链接:
转载请注明:
雨松MOMO提醒您:亲,如果您觉得本文不错,快快将这篇文章分享出去吧 。另外请点击网站顶部彩色广告或者捐赠支持本站发展,谢谢!
作者:雨松MOMO
专注移动互联网,Unity3D游戏开发
如果您愿意花10块钱请我喝一杯咖啡的话,请用手机扫描二维码即可通过支付宝直接向我捐款哦。
您可能还会对这些文章感兴趣!怎样取gameObject.name中的信息_百度知道}

我要回帖

更多关于 unity 创建gameobject 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信