一.MMORPG游戏 – 极世界(个人实现部分)
1.项目描述
一款多人在线MMORPG游戏,利用C#语言在框架下编程实现基本交互功能,个人工作内容如下。
2.数据库
2.1 数据库采用MS SQL Server
2.2 使用Entity Framwork框架根据VS中的模型生成Sql语句,到数据库中执行生成相应表
3.服务端
3.1 数据协议
:使用Google Protobuf实现协议类
3.2 项目中人物移动同步采用状态同步
.生成协议MapEntitySyncRequest,协议包含移动角色的id、位置、状态等信息
.当角色移动时通过协议将信息发送给服务端,服务端计算更新该角色在内存中的位置信息,然后服务端广播给所有在当前地图的角色的客户端,客户端对该移动角色位置进行更新
4.客服端
4.1 人物移动动画与NPC动作动画实现
使用动画状态机配合代码进行控制。
4.2 UI框架模块
.
静态UI
:编写一个统一管理的脚本挂载管理其上的控件
.
动态UI
:编写UIManager类负责管理和加载UI预制体,预制体统一继承UIWindow类实现常规显示 关闭等功能
.
世界UI
:挂载管理类,使其时刻面对角色,并通过参数可调节其位置
4.3 寻路与路标指引功能
寻路功能
:使用Unity中Navigation功能配合代码实现寻路移动
路标指引
:使用Unity中LineRenderer配合代码实现路标指引功能
4.4 小地图功能
利用Mark组件和角色在场景中的位置,通过计算得到偏移值,然后将偏移值赋值给Mark组件实现小地图功能
5.游戏中的系统功能实现
5.1 道具系统的设计与实现
客户端工作内容
:
Item类负责定义道具实体信息,ItemManager 负责管理所有的道具相关操作,ItemServices负责与服务端交互
服务端工作内容
:
Item类包含道具实体相关数据,ItemManager 负责与数据库进行交互,ItemServices负责与客户端交互
.分析、设计和实现道具的存储数据结构(道具ID、道具名字、拥有者、资源路径、道具描述等信息)-ItemDefine类
.生成道具的传输协议-NitemInfo类(由工具Protobuf生成)
.通过Entity Framwork框架设计道具在DB中的存储模型然后生成相对应的SQL语句,在Sql中生成相应表-CharacterItem 该表负责存储角色所拥有的道具
5.2 商店系统的设计与实现
客户端工作内容
1
.配合UI框架制作UI界面挂载脚本UIShop进行管理以及商品实体UI预制体
其中商店界面通过UGUI接口ISelectHandler实现点击商品购买功能
2
.ShopMangaer类与ItemManager类交互从而管理商店中的商品显示,与ItemSerivice类交互实现商品的购买
3
.ItemService类负责与服务端交互,实现商品购买消息传递与结果反馈
服务端工作内容
1
.设计与实现商品购买消息协议(商店ID与商品ID),商品的价格在服务端配置表包含,通过检查消息传递角色ID的金币即可返回购买是否成功
2
.设计与编写ShopManager类,内部包含一个购买函数,判断购买消息是否成功,若成功除了返回成功消息外还需在数据库中为该角色添加道具
5.3 背包系统的设计与实现
客户端工作内容
:
1.背包界面UI和物品预制体实现以及相关管理脚本(UIBag,BagItem)
2.BagService类负责与服务端交互获取角色身上所有道具列表
3.BagManager类负责存储角色所有道具信息,管理背包道具的增删
服务端工作内容
:
1.设计NBagInfo协议,包含角色背包中道具个数和道具信息
2.BagSaveRequest协议,传递背包道具修改后的存储信息
3.数据库新增表格CharacterBag,存储角色背包道具列表信息
4.BagService类负责与数据库交互存储和传递角色背包道具列表到客户端
5.4 装备系统的设计与实现
客户端工作内容
:
1.装备UI界面的制作,装备预制体的创建,UICharEquip类管理装备的显示与穿戴脱卸,装备预制体管理脚本通过继承IPointerClickHandler接口实现点击穿戴功能。
2.EquipManager类负责与ItemSerivice交互管理当前角色身上所有道具与相关操作
3.ItemSerivice类负责与服务器交互,穿戴改动请求发送与接受响应消息
服务端工作内容
1.设计装备属性定义-EquipDefine类,用Dictionary<int, EquipDefine>容器读入配置表中所有装备数据内容,通过装备ID做key索引
2.装备穿戴请求协议与响应协议的设计与实现,
5.5 声音系统的设计与实现
客户端工作内容
1.制作UI音效设置界面,通过Toggle组件勾选功能实现静音,Slider组件滑动设置音量大小
2.编写SoundManager类,通过封装原有接口实现音乐和音效的播放功能,并将其实现为单例类,方便调用
5.6 公会系统的设计与实现
客户端工作内容
1.UI界面分为三个
主
界面 公会创建申请界面、加入公会界面、公会界面
2.为三个公会UI
主
界面编写相应的管理脚本
3.GuildManager类负责管理UI界面的显示 关闭等功能
4.GuildService:与服务端交互,实现公会创建,处理公会成员申请、升职等功能
服务端工作内容
1.设计和实现交互协议-GuildRequest、GuildResponse
2.Guild类:定义公会的信息字段,公会ID、名字、成员等
3.GuildManager:管理所有的公会
4.GuileService:与客户端交互、处理公会创建、成员变更、成员升职等公会功能,与数据库交互,存储已创建好的公会
5.7 好友系统的设计与实现
客户端工作内容
1.好友UI界面以及好友词条预制体
2.编写相关UI管理脚本(UIFriends,UIFriendItem)
3.FriendManager类负责管理当前角色的好友列表
4.FriendService类负责与服务端交互,实现好友增删功能
服务端工作内容
1.传输协议设计与实现
2.FriendManager类负责管理每个角色自身的好友关系列表和相关好友增删操作
3.FriendService类与客户端交互,传递好友修改消息给好友双方客户端,与数据库交互,存储好友关系
数据库工作内容
1.新建表TCharacter存储角色之间的好友关系
5.8 组队系统的设计与实现
客户端工作内容
1.邀请组队UI界面,队伍UI界面以及相关UI脚本管理
2.TeamManager类:显示UI界面、更新队伍信息
3.TeamService类:与服务端交互实现向他人发出组队邀请以及处理他人组队邀请等功能
服务端工作内容
1.设计与实现组队邀请协议
2.Team类:定义了队伍的相关信息、队伍成员、队长等
3.TeamManagerr类:管理所有的队伍,队伍创建,某队成员添加等功能
4.TeamSerivice类:与客户端交互、发送组队邀请结果给队伍成员
二.VR游戏 – 湘江战役(独立完成)
1.项目描述
一款VR体验游戏,玩家通过佩戴HTC vive设备游玩,游戏内容是玩家以一名普通红军身份参与湘江战役。
2.项目相关技术点
2.1 SteamVR
通过导入SteamVR 插件与下载SteamVR平台,实现VR设备与Unity之间的交互功能,玩家通过VR设备可与Unity场景之间进行交互。
2.2 相关动画片段
利用Unity中的TimeLine制作游戏中需要的动画片段结合代码中的协程开启关闭,从而实现动画播放功能
2.3 游戏场景物品与VR设备交互
通过学习与阅读SteamVR插件源码,实现VR设备与UI交互功能、抓取功能、开枪射击、拉弓射箭、渡河划船等交互功能
2.4 对象池管理
对于敌人子弹以及飞机轰炸的炮弹、相关特效等频繁创建的游戏物品编写了对象池管理系统进行预热,从而减少了GC优化了游戏性能
2.5 音乐系统
编写了音乐系统类,设计成单例类,方便在游戏代码其他位置可以方便的开启和关闭背景音或音效
三.横版2D游戏 – 太空射击 (独立完成)
1.项目描述
一款2D横板射击游戏,主角驾驶战机与太空中的敌机交战,游戏中包含BOSS战、技能、导弹等功能
2.相关技术点
2.1 玩家操作
采用了Unity新版输入系统,设置好按键后生成对应的C#代码类,编写战机移动相关脚本,在脚本中为生成好的C#代码类中的按键事件进行赋值即可。
2.2 增强游戏操作手感
为战机添加刚体组件,按键按下时速度由零开始加速到某一合适的值,松开从该值逐渐减速归零。战机的闪避动作引入贝塞尔曲线函数,让战机的动作更真是丝滑。
2.3高分排行榜系统
采用JsonUtility构造存储系统,将玩家分数保存,通过数据容器List读取分数并排序显示在UI排行榜上即实现了高分排行榜系统。
存储系统详情
2.4 Boss战
1.设计Boss的三种攻击方式,通过合适的随机函数和技能冷却时间实现Boss的随机攻击
2.规划Boss的移动范围和移动路径,在范围内随机下个移动点,然后让Boss随机加速到达该点
3.Boss的激光攻击使用Animator动画控制播放激光攻击动画,伤害判定函数通过在激光上挂载碰撞器与战机检测碰撞实现