1,prefab相当于一个类,字面意思就是预设,预先设计好的类。把一个prefab拖放到场景中就生成了一个实例,把二个prefab放到场景中就生成了两个实例。
不同的实例独立动作,拥有自己独立的状态与数据,不受其它实例的影响。
2,磁盘上有多个物体d1.fbx, d2.fbx, dn.fbx,将它们拖放到场景中做成一个prefab X,X中保存的是对这些资源的引用,而不是实际资源。当有X的多个实例 x1, x2, xn时,修改任何一个实例中物体d的材质,其它实例也会看到修改的效果;
或者直接在dn.fbx的inspector面板修改材质,也会同时影响所有引用了dn的预设实例。
实例的属性哪些是独有的,不受其它实例影响的,哪些是指向引用的,会与其它实例相互影响的?
生成属性是独有的:由U3D生成的运行时组件,如transform, meshfiler, meshrender等。
如:更改一个实例的坐标不会影响其它实例,一个实例不开启meshrender也不影响其它实例。
原始数据文件的属性是共有的:材质,动画,顶点,法线等。
如:更改一个实例的材质,其实是在更改磁盘上的数据文件,会导致所有引用都跟着更改。
3,由于prefab中保存的只是对实际资源的引用,因此它很小,往往是几kb,随着引用的增多缓慢的增加。
增加的只是对引用物体的引用字符串而已。
尽管引用占用的空间比较小,在游戏开发还是应该防止prafab重复引用的问题,以减少打包的尺寸。