开枪实现图与填弹实现图
在这一节中我们梳理枪械系统的各种功能需求,然后绘制枪械系统的功能实现图
名称 | 形象 | 子弹 | 弹夹容量 | 攻击力 | 频率 | 射程/范围 | 限制 | 换弹时间 | 描述 |
---|---|---|---|---|---|---|---|---|---|
手枪 | 7 | 1 | 1发/秒 | 半屏 | 无限 | 3秒 | 默认枪 | ||
冲锋枪 | 30 | 1 | 6发/秒 | 2/3屏幕 | 需要弹药 | 3秒 | 无 | ||
步枪 | 50 | 3 | 3发/秒 | 1屏 | 需要弹药 | 1秒 | 有一定后坐力 | ||
狙击枪 | 12 | 6 | 1发/秒 | 1屏 | 需要弹药 | 5秒 | 红外瞄准+后坐力大 | ||
火箭筒 | 1 | 5 | 1发/秒 | 1屏 | 需要弹药 | 4秒 | 跟踪+爆炸 | ||
霰弹枪 | 1 | 1 | 1发/秒 | 半屏 | 需要弹药 | 1秒 | 一次发射6~12颗子弹 |
对于枪械系统,我们在表现层有两个地方需要展示枪械系统的数据,一个是UI界面,一个是角色形象
除了这两个比较明显的需求之外,还有一些隐性的功能需求,比如能不能开枪的判断,这个需要根据弹药量进行计算,再比如开枪之后发射什么样的子弹,具体怎么发射,子弹打中敌人怎么样没打中敌人怎么样,这些功能点都是枪械表现层的需求。
大致的需求如下:
- 界面显示枪械信息
- 主角手持枪械对象
- 形象
- 开枪逻辑、攻击力计算等
我们可以把不同的枪械的功能和形象都做成Prefab,然后这些Prefab上都挂上各自的脚本,让这些脚本都继承共同的父类(GunController
),相同的逻辑在父类实现,不同的逻辑在子类通过override方式定制。
这里设计的逻辑就是很简单的表现层逻辑,到时候写就可以了。在纸上设计阶段,我们的重点是要把数据层逻辑理清楚,如果整个项目都在纸上设计,对设计者的要求太高。如果想锻炼能力,可以在纸上设计表现层的逻辑,这样节省很多纠结的时间。
我们在之前绘制过开枪功能的草图
我们的GunInfo
需要更多的枪械状态来描述,比如填弹状态,射击状态,冷却状态(枪械开枪频率),还需要有一些数据,比如枪械名字,枪械名字其实就是类型,我们需要通过枪械名字去查询一些数据,比如开枪频率、填弹时间等。
当没有子弹的时候,我们可以进行填弹,填弹时机可以是开完一枪后枪内没有子弹的话自动进行,也可以是玩家再次按下开枪之后判断有没有子弹,没有子弹再进行,在这里我们使用前者。除此之外玩家可以通过按R键提前填弹。
总结之后我们的功能实现图如下
功能实现图虽然不能完全绘制出具体的实现细节,但是已经帮我们节省很多编码时的工作量了,比如命名、数据结构设计等工作。
后续枪械系统相关的功能实现图都绘制好之后,会再进行一次检查工作。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 ATAO2017,阿宅创造奇迹!!