UE4学习笔记_03
今天主要学习了BluePrint,看了官方文档的介绍,然后是YouTube上的视频教学。视频教学的前9集讲的比较细(或者说比较啰嗦...),把基础内容都覆盖了;后面的QuickShot系列则短小精悍,在几分钟内寥寥数语就展示了BluePrint的某个功能要点,受益颇丰。
但总的来说这些视频教程还是偏基础的,几大类BluePrint里只涉及到了Level BP和Class BP,DataOnly BP、BP Marco Library以及BP Interface都未谈及,要想深入还是要更多地参考文档(或高级ShowCase例子)。
下面是一些BP的学习心得:
- Class BP是构建游戏逻辑的核心单元,它的功能和定位类似于Unity3D和UDK里的Prefab,可以将多个Asset组合在一起形成一个有机的Actor,然后由Level BP将多个Class BP串起来就构成了游戏的完整逻辑
- Level BP里的内容不宜过多,它的主要职责应该是让多个ClassBP协同进行工作,从而实现整个游戏的完整逻辑。最好不要在Level BP里做一些很细节、很底层的工作(比如控制一个灯的开关等),这一点类似于大型C/C++程序的main()函数的实现方式
- 除了通过UE4系统内消息与外界交互之外,Class BP可以通过创建EventDispatcher来给外界发送自定义消息,通过创建CustomEvent来从外界接收自定义消息。这样就使BP间通信没有了任何的障碍
- 如果工程的复杂度上升到一个级别,光通过EventDispatcher和CustomEvent来进行BP间通信可能容易出错,也不易管理,此时就应该使用BP Interface来规范BP间的通信接口;此外,通用的BP逻辑应该存放到BP Macro Library中
- Class BP支持继承,即可以在一个Class BP的基础上创建子Class BP,子BP会继承父BP的所有成员,标记为私有的变量在子BP中无法修改
- 值得一提的是:子BP实现的事件响应函数不会覆盖父BP的响应函数,当事件被捕获时是先执行子BP的响应函数,执行完毕后再执行父BP的响应函数,由此类推,形成一个串行的响应函数链
- 在Timeline的曲线中增加点的快捷键是Shift+MLB
从上面可以看到,作为BP的核心:ClassBP的设计是参考了多种编程语言的精华所得来的:它采用了面向对象里的封装、单继承,又采用了异步编程里常用的异步消息传递模型,同时还参考了函数式编程里的无副作用的函数调用链,这使得整个BP系统在规模和复杂度上升到很高的程度时仍然可以被控制和管理,同时还很好地支持了分布式和并发的应用场景,这避免了很多难以发现和排查的条件竞争Bug,而性能方面也能很好地随着硬件资源(比如多核)的扩展而扩展。从BP的设计中不难看出,UE4的设计和实现是经过长期调研和深思熟虑后的成果。
UE4博大精深,还有很多东西值得学习,后面有机会再继续写。