我们可以把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目前应该是效率最快的方法了。