目录
- 项目介绍
- 需求分析
- 系统设计
项目介绍
我们打算做一款联机FPS游戏,
玩法
主要为PVP玩法,分队进行对战。
角色在商店可以使用金币购买装备,击杀或胜利可以获得金币。
装备主要为各种枪械。
每个角色自带一些技能,包括主动技能和被动技能。
玩法流程如图:
2、用例的概要描述
主要参与者 | 优先级 | 用例名 | 用例概述 |
---|---|---|---|
玩家 | 高 | 输入角色名称 | 玩家可以自定义角色名称 |
玩家 | 中 | 选择地图和房间 | 玩家可以创建不同的房间和地图来等待其他玩家加入 |
玩家 | 中 | 选择不同角色和阵营 | 玩家可以更换所选择的角色和阵营 |
玩家 | 中 | 在商店购买装备和弹药 | 玩家可以在商店购买不同的武器(分为主武器、副武器、近战武器、特殊武器)和弹药 |
玩家 | 高 | 控制角色 | 玩家可以控制角色移动,跳跃,蹲下,射击,切换武器,瞄准,换弹等 |
玩家 | 低 | 查看菜单 | 玩家可以在菜单界面调整音量大小和鼠标灵敏度,也可以退出房间 |
3、假设和依赖
玩家具备一些FPS游戏常识。
功能需求
1、基于pun2的联 功能
在unity中导入unity商店中的pun2的工具包,设置photon的服务器id码,修改服务器地区为CN,要 络实例化的预制体放到PhotonNetworking的Resources目录下。
2、角色名称功能
玩家在角色框内输入名称,保存名称并上传到服务器。玩家下次启动游戏时默认名称是该名称。玩家输入名称为空时,名称为Default。
3、选择房间和地图功能
玩家在房间框内输入房间名称,并且在地图下拉选项中选择地图,点击创建房间按钮,系统就会在房间列表实例化出一个带有该房间名和地图名的按钮。另外的玩家点击该按钮可以加入该场游戏,游戏最大人数可以调整。
4、选择不同角色和阵营功能
玩家可以在游戏对局开始前,选择不同角色和不同阵营开始对局。不同的角色拥有不同的属性和技能搭配。不同的阵营获胜的目标要求不一样。
5、在商店购买不同的装备和弹药功能
玩家可以在游戏对局开始时在出生区域购买不同的装备和弹药。装备可分为主武器、副武器、近战武器、特殊武器,弹药划分为主武器弹药、副武器和特殊武器弹药。
6、控制角色功能
玩家可以通过WASD键和鼠标滑动控制玩家的移动和视线,左键射击,右键瞄准,R键换弹,E键释放技能,Space键跳跃,Ctrl键蹲下,1234对应不同武器。每个操作都有各自对应的动画。
7、玩家菜单功能
玩家可以通过Esc键唤出菜单,在菜单中玩家可以通过拖动滑动条或者输入数字来设置音量大小和鼠标灵敏度。玩家也可以通过点击退出房间按钮返回到游戏大厅界面。
非功能需求
1、安全性
需求分类 | 定义要素 | 需求内容 |
---|---|---|
数据安全 | 数据完整性 | 数据同步到服务器并进行对比,防止玩家在本地修改数据。 |
系统安全 | 输入限制 | 具备输入字符和输入数据的类型, 长度和范围检查功能. |
系统安全 | 安全机制独立性 | 安全设计和实现应该具有独立性, 不能依赖当前主机的基础安全机制来确保自身和数据不受破环或拒绝服务. |
2、易用性
需求分类 | 定义要素 | 需求内容 |
---|---|---|
用户界面 | 界面风格要求 | 提供一致性的图形用户界面风格 |
界面输入要求 | 操作界面必须明确表示出必填的输入信息 | 每个可能的输入都有确定的返回值, 如果出现异常会及时 错并提供正确的帮助信息. |
3、可靠性
可用性
服务器24小时运行,可以在任何时间开始游戏。
4、性能
服务器玩家最大的容纳量为20人。
中国区域内延迟应低于100ms。
验收验证标准
1、 界面验收标准
序 | 界面名称 | 界面描述及预期效果 |
---|---|---|
1 | 大厅界面 | 玩家名称输入框,进入大厅按钮,房间名称输入框,创建房间和加入房间按钮,房间列表显示区域,地图选择下拉框 |
2 | 玩家菜单界面 | 音量大小滑动条,鼠标灵敏度大小滑动条,退出房间按钮,隐藏菜单按钮,战绩显示列表 |
3 | 商店界面 | 武器列表分为主武器、副武器、近战武器、特殊武器、弹药这些小模块,点击模块展开不同的武器,双击可以购买装备 |
2、功能验收标准
序 | 功能名称 | 预期效果 |
---|---|---|
1 | 选择角色和阵营 | 选择角色和阵营后加入游戏对局 |
2 | 购买武器和弹药 | 如果玩家金钱足够点击按钮,扣去金钱购买成功,如果金钱不足,会提示玩家金钱不足 |
3 | 角色控制功能 | 玩家可以通过WASD键和鼠标滑动控制玩家的移动和视线,左键射击,右键瞄准,R键换弹,E键释放技能,Space键跳跃,Ctrl键蹲下,1234对应不同武器。每个操作都有各自对应的动画。 |
4 | 跳跃和蹲下功能 | 玩家不可在空中二段跳,落地后才可进行下一次跳跃,并且有跳跃音效。玩家蹲下走路速度会变慢,声音会变小。 |
5 | 射击功能 | 射击根据武器的不同,使用不同的攻击动作,枪口准星会随射击抖动,子弹带有力的效果,能与场景里的刚体进行互动,并且伴有射击音效。击杀对手会获取金钱 |
6 | 瞄准功能 | 右键可以放大瞄准,会有进行瞄准这个动作,并且会有一条红色预设线发出 |
7 | 换弹功能 | R可以换弹,如果子弹数量为满或者备用子弹数目为0则无操作,否则播放换弹动作,并且更新子弹数量。 |
8 | 调整视线功能 | 鼠标左右移动会更换视线朝向,玩家模型也会根据视线看向不同位置。 |
9 | 切换武器功能 | 玩家按键1234可以切换不同武器,如果该栏位没有武器则不作响应 |
10 | 释放技能功能 | 玩家E键释放技能有技能冷却,冷却时间会在界面上显示出来。释放技能时实例化技能的预制体,技能释放完毕销毁实例出的物体。 |
11 | 判断碰撞减血功能 | 玩家击中别的玩家会在被击中玩家本地减少血量,并通过photonview的同步函数血量将同步到其他玩家的客户端。玩家子弹击中自身会判断为本地返回不扣血。 |
12 | 判断胜利功能 | 玩家血量为0会销毁玩家,如果一个阵营玩家数目为0,则会判断对方胜利。 |
13 | 地图功能 | 按M键可以查看地图,地图上只可查看己方阵营位置。 |
团队分工
刘洋:程序
徐意:程序
刘涛:策划
系统设计
1.系统功能描述
联机FPS游戏项目,玩家输入自己的名字创建角色后,可以选择创建或加入游戏房间进行游玩。
玩家在地图里可以移动跳跃,攻击,购买武器,切换武器,施放技能。
当达成一定条件后游戏结束并进行结算。
2.游戏UI
游戏界面操作
输入模块
输入模块PlayerInput需要提供以下公有变量:
变量名 | 类型 | 说明 |
---|---|---|
jump | bool | 跳跃 |
velocity | Vector2 | 当前移动速度向量 |
fire | bool | 开火 |
changeLeft | bool | 向左切换武器 |
changeRight | bool | 向右切换武器 |
reload | bool | 换弹 |
mouseVec | Vector2 | 当前鼠标速度 |
skill | bool | 施放技能 |
PlayerInput脚本维护一个按键表,可以修改按键。
控制模块
控制模块包括ActorController,CameraController,WeaponController,SkillController四个脚本,分别控制游戏角色,摄像机,武器和技能。

(2)武器系统
武器做成unity预设体,动态加载。包括属性脚本和武器模型。
武器属性WeaponAttr
属性脚本WeaponAttr需要有以下公有属性:
变量名 | 类型 | 说明 |
---|---|---|
damage | float | 攻击力 |
bulletSpeed | float | 子弹速度 |
shootSpeed | int | 射速 |
bulletNum | int | 装弹量 |
currentBulletNum | int | 当前装弹量 |
backup | int | 后备弹夹 |
reload_time | int | 装弹时间 |
武器控制器WeaponConroller
武器控制器可以控制武器的开火,换弹,切换等待。
通过当前武器的属性脚本获取公有属性来调整具体细节。
Weapon需要提供以下公有属性和方法:
变量名 | 类型 | 说明 |
---|---|---|
allWeapon | static List | 全局静态变量,用来储存所有武器预设体,方便实例化 |
weapons | List | 角色拥有的武器 |
current_Weapon | gameobject | 当前武器 |
方法名 | 返回类型 | 参数 | 说明 |
---|---|---|---|
AddWeapon | void | int | 为角色添加武器 |
changeWeapon | void | int | 为角色更换武器 |
(3)商店系统
商店界面为本地存在的Canvas,且只有当photonview.isMine为真时才显示。
商店属性
变量名 | 类型 | 说明 |
---|---|---|
Money | Int | 玩家金钱数 |
ItemPrise | Int | 物品价格 |
MaxMoney | Int | 玩家最大金钱数 |
PurchaseTime | Float | 商店允许购买的时间 |
ItemName | String | 物品名称 |
StoreKey | String | 商店打开关闭按键 |
商店控制器StoreConroller
商店控制器挂载在游戏控制器上,当本地玩家按键时会打开本地玩家的商店界面
玩家可以通过点击购买按钮购买武器。
(4)技能系统
技能特效做成unity预设体,技能写成脚本挂载在不同人物上。
技能属性
变量名 | 类型 | 说明 |
---|---|---|
Duration | Float | 持续时间 |
CoolingTime | Float | 冷却时间 |
SkillKey | String | 技能按键 |
SkillText | String | 技能说明 |
SkillPrefab | GameObject | 技能特效预制体 |
SkillDamage(可选) | Float | 技能伤害 |
SkillMove | Vector3 | 技能位移 |
SkillScale | Vector3 | 缩放大小 |
技能控制器SkillConroller
技能控制器可以控制技能的释放,停止等。
通过当前技能的属性脚本获取公有属性来调整具体细节。
(5)联机系统
通过photonview或者脚本实现IPunObservable接口上传和同步数据到photon服务器来保持客户端的参数一致。
需要同步的数据有:
角色的tranform,人物属性,人物动画状态机状态,人物武器。
子弹的tranform,子弹属性。
(6)游戏逻辑系统
每个游戏场景有一个GameManager节点,负责控制游戏逻辑,还有联 的初始化工作。
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!