使用:直接解压运行 游戏编程课设.exe 即可

一、游戏策划

游戏类型:2D横版游戏

画风:像素风

游戏概念和设计:玩家操纵主人公闯关打怪,最终取得游戏胜利

游戏规则

  1. 主角需要杀死所有怪物来获取他们身上的金币,以及收集散落的金币,来打开通往下一关卡的大门;
  2. 主角有初始血量6点,但是血量无法回复;通过当前关卡将会恢复所有血量;
  3. 主角可以左右移动,可以二段跳
  4. 主角具有三种攻击方式:
    • 普通攻击:可以打中一定范围内的敌人,攻击频率高,无后摇,可以随意移动,但是伤害较低
    • 横扫:只有在地面或平台上才能发动,且攻击期间完全无法操作,前摇时间长,限制大,但是伤害较高
    • 下砸:只有在空中才能发动,且攻击期间完全无法操作,前摇时间长,限制较大,可以利用前端攻击敌人,较灵活,伤害一般
  5. 主角收到攻击不会产生僵直,受到攻击后,一段时间内免疫伤害;
  6. 场景内会有固定数量的怪物;击杀怪物必定会掉落金币;怪物一共有两种,Rat 和 Bat,他们在自己的领域范围内随机移动,一旦主角进入他们的察觉范围后,他们会警觉并且追击主角,追击过程中会增加移动速度;主角脱离察觉范围后,怪物会丢失目标,并回到自己的领地;怪物收到攻击会有一定僵直。
  7. 游戏特殊场景:
    • 地刺:持续对人物造成伤害。
    • 移动平台:可以规律移动自身的位置。
    • 门:需要集齐指定数量的金币才能进入。
    • 单向平台:从下方可以直接闯过,从上方需要主角操作(按S)才能通过。
  8. 选项菜单:
    • 开局有主菜单
    • 游戏中有暂停菜单

测试和反馈:开发者测试游戏,以及内测游戏(alpha)

二、实现过程

查找素材:在各大平台上查找一些开源素材

Top game assets - itch.io

B站死亡细胞素材

游戏引擎:Unity3D 2021版LTS

主要文件结构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Assets
├─Animations 动画
│ ├─Bat
│ ├─Coin
│ ├─FontDie
│ ├─FontPoint
│ ├─MainCamera
│ ├─Player
│ ├─Rat
│ └─Soul
├─Fonts 字体文件
├─Material 材质
├─Prefabs 预制件
├─Resources 声音资源
├─Scenes 游戏场景
├─Scripts 游戏脚本
├─Sprites 精灵图
│ ├─Enemys
│ ├─Player
│ └─Scences
└─TileMaps 瓦片地图

游戏脚本:语言C#

文件 说明
BackGroungFollow.cs 背景视差效果
BloodEffect.cs 血液粒子效果销毁
CameraFollow.cs 摄像机跟随
CameraShake.cs 相机抖动
CoinItem.cs 吃金币效果
CoinToDoor.cs 金币投入门中
CoinUi.cs 金币UI部分
DoorToNextLevel.cs 传送到下一关的门
Enemy.cs 敌人的抽象类
EnemyBat.cs 蝙蝠
EnemyRat.cs 老鼠
FloatPointBase.cs 浮动的文字
GameController.cs 游戏控制
HealthBar.cs 血条UI部分
MainMenu.cs 主菜单
MovingPlatform.cs 移动平台
PauseMenu.cs 暂停菜单
PlayerController.cs 主角操作控制
PlayerHealth.cs 主角血量
PlayerSlam.cs 主角普通攻击
PlayerSpin.cs 主角下砸
PlayerSweep.cs 主角横扫
SoundManager.cs 游戏音效
Spike.cs 地刺
UIManager.cs UI跟随门

主要部分的具体实现

  • 人物

    1. 人物站立:给人物加上钢体组件,设置动画Idle,设置碰撞框,加上地面并设置碰撞框
    2. 人物左右移动A D:人物具有初始速度属性,按下AD可以给角色加一个左右的向量,再乘上初始速度来实现移动。设置动画,以及切换动画的转向。
    3. 二段跳Space:设置动画逻辑,在空中可以额外跳跃一次,接触地面可以一段跳,并且允许二段跳。
    4. 攻击J K L:设置攻击子对象,给子对象设置攻击碰撞判定框,并编写脚本来实现判定的出现和消失。


    5. 交互E:在门内可以并按下E可以完成投币或者进入门的操作
  • 敌人

    1. 设置动画逻辑
    2. 编写脚本
    3. 调试参数
  • 门,金币,地刺

    1. 设置碰撞判定
    2. 编写脚本
    3. 设置参数
  • 声音控制

    1. 编写脚本,将函数暴露
    2. 需要触发声音时,调用播放声音函数。
  • 地图绘制

    1. 摆放做好的预制件
    2. 使用瓦片地图绘制
  • 动画切换

    1. 设置好参数(bool 或者 触发器)
    2. 在脚本中实现动画参数的变化
  • 单向平台

    1. 添加组件Platform Effect 2D实现单向穿过
    2. 编写脚本实现按键穿过(暂时修改Player碰撞层级为其他,穿过后修改回来)
  • 受伤相机震动

    1. 录制相机抖动动画
    2. 设置好动画控制器
    3. 编写脚本触发