文章目录
0,游戏性课程框架
- Gameplay 的挑战:
- 玩法系统要和动画、特效、UI、声效、Audio、外设等多个系统共同合作,因此岗位涉及面很多
- 同一个游戏也有很多不同的玩法,比如巫师三和昆特牌,对玩法系统的可拓展性要求高
- 玩法的快速迭代
一,事件机制
事件机制就是让GameObject 互相交互的机制,比如走到哪里发生爆炸。这种机制如果全都使用ifelse语句写死条件,系统会崩溃掉,所以一般使用event或者message的形式来实现。
想应对比较复杂的游戏机制时,事件机制一般采用发布-订阅模式(Publish-subscribe Pattern):不同的发布者发送不同类型的事件给事件调度者(event dispatcher),可以理解为一个调度公司,事件调度者把事件告诉对应的订阅者(不知道发布者是谁),然后订阅者作出相应的动作(callback)
- 该模式的三个关键点分别是 事件的定义、callback、事件的分发系统
1.1 事件的定义
Event Type + Event Argument(配置)
Event虽然可以使用基类去继承, 但如果不断加入新的事件类型和对应编辑性,则每次都需要重新编译(与上节课的代码反射相关),这时常见解决方法有:
- 将新事件新编译成的C++代码当成 DLL,加入到系统中(UE)
- 上层采用 C# 语言,方便动态挂接和扩展
- 用脚本语言
1.2 callback的注册
回调函数或触发函数(invoke)。回调函数的注册和触发有一个时间差,在这段时间有可能发生意外,比如订阅者被销毁,因此对象的生命周期和回调函数的安全性是非常重要的。
可以使用c++11中类似智能指针的技术解决:
- 强引用:使订阅者在有事件注册时不能销毁。但是会导致系统内存越来越大,所以很少这么用