雷霆战机
雷霆战机:躲避弹幕,击败敌机,通过吃比自己小的敌机升级。
遇到的困难:
- 飞机机体与子弹不匹配,通过字典匹配在一起。
- 飞机升级,子弹位置不确定,提取建好空对象,获取空对象位置。
- 子弹数目过多,导致卡顿,采用对象池统一管理子弹,多个子弹享元同一个贴图(享元模式),多个子弹克隆同一个原型子弹(原型模式)。
- 敌机生成数量不稳定,种类不均衡,采用工厂模式统一管理,控制各种类敌机数量。
- UI血量变化,一开始直接将血量写在了UI里,这样不符合低耦合的游戏思想,我又将血量放在飞机类,采用事件的形式,将扣血的通知传递给UI,更新血量。
- 地图循环播放,无限复制地图实现,发现这样低效,浪费内存,利用offset位置偏移,只用两种地图贴图不停循环实现,或者使用shader方式实现。
- 音频管理,不同敌机都会有一个音频组件,但不利于统一管理,单例一个总音频统一管理(单例模式)。
学习反馈:学会了如何优化游戏,各种设计模式的使用。
球球大冒险
基本玩法:在规定时间内,玩家要利用好各种球的特性去闯关卡
遇到困难:
- 小球的移动:一开始采用旋转Rotation进行旋转,但缺乏物理性,后面采用小球与地面的摩檫力驱动小球前进,给小球一个向前的扭矩力
- 小球的切换:不同小球间的切换涉及(大小、弹性、角动力等),如果制作三个蓝图来进行切换,会有很多组件重复切换例如相机等,所以直接切换staticmesh组件里的模型会更加好,而且我将各种物理属性用一个结构体存储,并用DataTable进行统一管理(后期只需要调整DataTable的值就行,无需更改代码)
- 温度系统的设计:火、水、风三个系统的开发, 火:采用Niagara粒子特效表现火,可燃物体间的交互 风:对于不同质量物体所产生的效果 水:浮力的计算,以及水效果的制作
- 物理障碍的制作:涉及物理约束组件的使用
- 关卡程序化生成的管理和销毁,关卡模块的设计
- 排行榜UI的设计:玩家开始游戏时会要求输入用户名,当游戏结束会判定是否有该用户的数据,若不存在,则保存当前用户数据,若存在,比较是否破纪录,破纪录就更新数据。数据保存本地时,先进行所有用户数据的排序再存储。最后输出UI显示出来