我们知道,资源和我们用在场景中的game object(游戏物体)还是不一样的,一个fbx文件是一个“资源”,而将拖到场景中就变成了一个“带有各种组件的节点”。在从“资源”到“带组件的节点”的转化过程中我们需要手动做一些设置,一些修改,甚至需要添加一些新的组件以满足我们的需求,或者将多个节点组合成新的游戏物体(比如用多个模型道具组合成一个NPC的家)。
从“资源的重复利用”的角度来看,直接使用素材资源来搭建场景是低效的,更好更高效的方法是重复利用在场景中已经完成了设置、修改、组合等工作的游戏物体。于是Unity3D就开发了 Prefab(预设物体) 这个功能。
Prefab可以被看做是对scene(场景)中game object(游戏物体)的描述文件,可以被储存在Assets文件夹内,以方便在其他scene中重复利用。Prefab实际上并不包含任何模型、贴图等真正的素材文件,只是一个虚拟的“参考”。
我们可以把prefab当做一种特殊的“资源素材”,在场景中引用prefab,相当于按照这个prefab所描述的规范引用其涉及到的“真实素材”。如果我们不小心删除掉了这些“真实素材”,那么prefab就失去了作用。
将场景中的单个game object用鼠标拖到Project面板中的Assets目录下,就可以创建这个game object的prefab。
要使用Prefab,将其拖到Scene View或者Hierarchy面板即可。
普通的game object在Hierarchy中显示为白色,而与prefab相联的game object在Hierarchy中显示为蓝色。
同时,与prefab相联的game object在Inspector面板中会多出一行关于Prefab的按钮,其中 Select 可以选择其所对应的prefab资源文件, Revert 可以将该game object恢复到原prefab资源文件的样子, Apply 可以将在此game object上做的修改应用的prefab资源文件中去(这样场景中其他关联于此prefab资源的game objects就都会自动更新)。
可以选择菜单 GameObject >Break Prefab Instance 来断开game object与prefab之间的联接关系。
假设你有个定义好的scrollView叫做scrollView....并且你想显示的UIView叫做view1(或者你有view2,view3...)
在设置好UIView的frame之后调用如下方法
[scrollView addSubview:view1]
[scrollView addSubview:view2]
等等,以此类推.
prefab只是一个文件,不会出现在游戏场景里。prefab只有两种使用方法,一是在代码里调用Instantiate;另一种是拖到场景里产生一个和他关联的物体(在Hierarchy里显示蓝色)。后一种情况可以发生多次,也就是说你这面墙上的砖都可以在scene里创建,不需要代码。而且他们都是和prefab关联的,你在prefab文件上的修改会在所有砖块上生效。还有一种方法是在场景里随便选个砖块,修改完后点apply,效果是一样的。关于你最后一个问题,你说的"这个prefabs的cube也出现了"其实并不是prefab,是你用来创建prefab的那个物体,完全可以删了。欢迎分享,转载请注明来源:内存溢出
评论列表(0条)