第一人称射击类系统设计项目书
项目说明设计题目古堡行动设计技术参数系统平台:Android 4.0.3以上(Windows 7)开发工具:Unity、MonoDevelop(Visual Studio 2013)开发语言:C#插件:无设计要求1. 游戏的登录注册,开始界面,以及游戏界面的UI设计2. 游戏地图,主角,敌人等的设计3. 界面简洁,大气,操作流程清晰,无过多错误4. 代码逻辑或思路清晰,有大部分全面的注释工作量课程设计报告2755字源程序大概 4500 行工作计划2018.04.15-04.28 根据课程设计的要求,进行需求分析,查找相关资料;2018.04.29-05.10 进行项目概要设计和整理素材;2018.05.11-06.18 详细设计和具体项目实现;2018.06.19-06.22 对游戏进行调试分析,撰写课程设计报告。参考资料1金玺曾.Unity3D手机游戏开发.北京:清华大学出版社,20132https:/www.csdn.net3http:/www.aigei.com/4http:/ng.pcgames.com.cn/目录1 需求分析12 概要设计12.1 设计思路12.2 存储结构设计12.3 功能模块设计23 详细设计33.1 游戏工程视图33.2 游戏界面布局43.3 功能模块设计实现53.4 其他设计实现113.4.1 摄像机的跟随113.4.2 游戏音效的添加123.4.3 游戏开始界面的设计124 运行与测试145 总结16小组成员分工表161 需求分析1.1技术需求此游戏是在Unity2018上开发出来的,Unity2018可以支持2D、3D场景的编辑,本游戏是基于3D场景开发的。游戏中的脚本语言使用的是C#,Unity2018中的microsoft visual 2017为脚本编辑提供了平台。1.2功能需求1.2.1古堡行动游戏玩法介绍:玩家通过注册登录帐号进入游戏,游戏中设有三个敌人出生点,并且会自动寻路并攻击玩家,玩家通过持枪射击对抗敌人,每击杀一个敌人玩家为加一分,玩家有血条,地图会随机生成血包,供玩家增加血量,当玩家血量值为0时,游戏失败;当玩家击杀敌人个数达到200个后,游戏即为胜1.2.2古堡行动游戏制作功能的需求:登录注册、玩家和敌人AI、游戏特效(子弹设计特效,敌人死亡特效)、敌人生成、敌人自动寻路、碰撞检测、UI界面设计.2 概要设计2.1 设计思路我们选择第一人称射击游戏的设计来源来自经典的cf游戏,但由于能力和时间原因,我们做出来的很简单。设计思路是要保证游戏拥有最基本的第一人称射击游戏的功能。2.2 存储结构设计游戏中出现的所有类: 例如:Player类:玩家类Enemy类:敌人类AppearEnemy类:敌人出生点AddBlood类:血包Bullet类:子弹ShootAudio类:射击音效GameManager类:游戏状态设计Xml文档<Root><Useruser_name="Admin"user_password="123"qq="123456"/><Useruser_name="ylb"user_password="123"/></Root> 2.3 功能模块设计游戏具有六大功能模块,分别为:游戏开始模块(1) 战斗模块(2) 生存模块(3) 场景切换模块:包括场景触发器的设计;(4) 分数统计模块:包括对玩家分数的显示;(5) 游戏结束模块:包括游戏结束菜单的设计;其功能模块图如图2-1所示:古堡行动游戏战斗模块生存模块场景切换模块分数统计模块游戏结束模块游戏开始模块图2-1功能模块图3 详细设计3.1 游戏工程视图“Audios”文件夹如图3-1所示:图3-1 “Audios”文件夹“Textures”文件夹如图3-2所示:图3-2 “Textures”文件夹然后我们需要新建“Materials”:材质文件夹;“Prefabs”:预制文件夹;“Scenes”:游戏场景文件夹;“Scripts”:脚本文件夹。总体工程视图如图3-3所示:图3-3 总体工程视图3.2 游戏界面布局3.2.1.开始界面图3-4 开始界面3.2.2.结束界面图3-5 结束界面3.3 功能模块设计实现3.3.1游戏开始设计voidStart()_zc.gameObject.SetActive(false);_xmlPatch=Application.dataPath+"/user.xml"if(!File.Exists(_xmlPatch)XmlDocumentxmlDoc=newXmlDocument();XmlElementroot=xmlDoc.CreateElement("Root");xmlDoc.AppendChild(root);XmlElementuser=xmlDoc.CreateElement("User");user.SetAttribute("user_name","Admin");user.SetAttribute("user_password","123");user.SetAttribute("qq","123456");root.AppendChild(user);xmlDoc.Save(_xmlPatch);Debug.Log("xmlcreatsuccess!");/Updateiscalledonceperframepublicvoidjingruyouxi()if(zhanghaoinput.text=""|mimainput.text="")tishixx.text="密码或用户名为空,请重新输入!"zhanghaoinput.text=""mimainput.text=""return;Debug.Log(zhanghaoinput.text);Debug.Log(mimainput.text);XmlDocumentxmlDoc=newXmlDocument();xmlDoc.Load(_xmlPatch);XmlNodeListnodelist=xmlDoc.SelectSingleNode("Root").ChildNodes;foreach(XmlElementxeinnodelist)Debug.Log(xe.GetAttribute("user_name");if(xe.GetAttribute("user_name")=zhanghaoinput.text)if(xe.GetAttribute("user_password")=mimainput.text)tishixx.text="登录成功!"SceneManager.LoadScene(4);elsetishixx.text="密码输入有误!"elsetishixx.text="用户未注册,请注册!"publicvoidzc()if(zcyonghuinput.text=""|zcmimainput1.text=""|zcmimainput2.text="")tsxx.text="信息不完整!"return;if(zcmimainput1.text!=zcmimainput2.text)tsxx.text="两次密码输入不一致!"return;XmlDocumentxmlDoc=newXmlDocument();xmlDoc.Load(_xmlPatch);XmlNodeListnodelist=xmlDoc.SelectSingleNode("Root").ChildNodes;foreach(XmlElementxeinnodelist)if(xe.GetAttribute("user_name")=zcyonghuinput.text)tsxx.text="用户名已经被占用!"return;/取得根节点XmlNoderoot=xmlDoc.SelectSingleNode("Root");/创建User新节点XmlElementuser=xmlDoc.CreateElement("User");/XmlElementuser1=xmlDoc.CreateElement("User_lov");/XmlTextlov=xmlDoc.CreateTextNode("158");/user1.AppendChild(lov);/设置属性user.SetAttribute("use