蓝图与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人才的培养,精心打造并推出零基础入门、高手进阶、推荐就业为一体的课程体系,全面提升学员的个人素质能力和团队协作能力。欢迎咨询!