什么方法可以找到场景素材下所有的GameObject

        我们可以把prefab当做一种特殊的“资源素材”在场景素材中引用prefab,相当于按照这个prefab所描述的规范引用其涉及到的“真实素材”如果我们不小心删除掉了这些“真实素材”,那么prefab就失去了作用

        首先我们要在Project面板中创建一个Resources文件夹。Resources在unity是一个特殊文件夹Resources文件夹允许你在脚本中通过文件路径和名称来访问资源。放在这一文件夹的资源永远被包含进build中即使它没有被使用。因为Unity无法判断脚本有没有访问了其中的资源项目中可以有多个Resources文件夹,因此不建议在多个文件夹中放同名的资源一旦build游戏,Resources文件夹中的所有资源被打包进游戏存放资源的archive中这样在游戏的build中就不存在Resources文件夾了。即使脚本中仍然使用了资源在项目中的路径

    然后我们将我们创建的一个3D模型拖入这个文件中(其实也可以不用拖入这个文件夹,其他地方也行只不过我们后面需要实例化这个Prefab)。

做成预制件之后模型对象就会出现这三个按钮

对预制体进行修改修改之后选择Inspector面板

Revert:撤销对预制体的修改

Apply:把预制体的修改保存到预制体文件中

只用对预制体结构进行改变Revert才有效。

现在我们使用脚本代码来实例化Prefab预制件

Instantiate是克隆方法,把resources中加载的预制件克隆实例化一个出来

然后把脚本添加到相机对象中

运行程序,将会实例化一个预制件

大家可以试一試用这个来搭建一个金字塔。

Unity中常用到查找对象,非隐藏的、隐藏的各种方法性能有高有低,使用又有各种条件限制

在此对查找的性能和条件进行分析。开发时遇到的主要问题是查找隐藏對象

没有完美的查找方法,只有最合适的查找方法

通过名字或路径查找游戏对象

隐藏对象包括查找路径的任何一个父节点隐藏(active=false)

2.如果查找不在最上层,建议合理使用路径查找路径查找是把双刃剑

优点1:解决查找中可能出现的重名问题。
优点2:如果有完全的路径减少查找范围,减少查找时间

缺点: 路径或结构调整后,容易影响到程序中的查找需要重新定位查找路径。

3.如果路径查找中的任何一个父节点active=false这个对象都将查找不到。

4.使用方便但效率低下
此查找相当于递归遍历查找虽使用方便但效率堪忧,建议在Start()函数中查找对象并保存引用切忌在Update()中动态查找。

实际开发中会将功能预制体放到一个可见的GameObject目录下将这个GameObject目录作为查找根节点,下面的所有对象(隐藏、非隐藏)嘟可以查找到

你可以把”map”节点放在一个active = true的MapRoot上,无论是关闭 或者 显示 代码中写起来都很方便 假如你的map节点就是顶级节点,那么它一旦忝生acive = false 那么你将无法得到它的对象,更无法设置它的属性了

返回指定类型的对象列表。主要用于编辑器中eg。检测内存泄露、批量查找的功能等

目录结构如下绿色代表现实,红色代表隐藏

找到了一个即使隐藏root节点gameObject也能進行查找的方法


参考文章:雨凇Unity获取游戏对象详解

这个方法也能获取到根节点下的沒有激活的GameObject目前应该是效率最快的方法了。

我要回帖

更多关于 场景素材 的文章

 

随机推荐