蓝图与unity的prefab在“语言层面”有着本质的不同。

  unity的prefab可以认为是序列化的对象,用的时候加载的prefab本身和用加载的prefab instantiate出来的并没有什么区别。

  ue4的蓝图本身可以认为是序列化的类,加载蓝图仅仅是相当于加载了一个类,用蓝图实例化的对象才是对象。即如果你把蓝图加载到内存,然后对这个蓝图类用getclass,和你对这个蓝图实例化出的对象调用getclass得到的结果是不同的,对这个蓝图实例化的对象调用getclass的到的就是一个代表这个这个蓝图类的uclass,而对这个蓝图本身调用getclass,得到的则是一个代表ublueprintgeneratedclass类(其实就是uclass的子类)的uclass。当然,在实际的实现上会有cdo(class default object),不过这属于实现的范畴,而不是“语言层面”的理解。

  要说优缺点,其实prefab和蓝图类在使用起来的区别并不大,因为虽然prefab可以在“语言层面”上认为是序列化对象,但我们加载之后也很少会直接用这个对象,总是要instantiate一份再用。

  硬要说的话,因为蓝图类在“语言层面”上被理解为序列化的类,因此它有基类,也可以被继承,总体来说要比prefab更加贴近程序员的理解,而prefab则更贴近策划美术对于一个“资源”的认同。

  弘成it教育致力于互联网it人才的培养,精心打造并推出零基础入门、高手进阶、推荐就业为一体的课程体系,全面提升学员的个人素质能力和团队协作能力。欢迎咨询!