1、课设作品需求分析.. 1

2、课设作品详细设计.. 1

3、课设作品编程实现.. 1

3.1场景搭建... 1

3.2角色控制... 1

3.3游戏UI设计... 1

3.4添加声音... 1

3.5添加粒子特效.. 1

4、课设作品测试.. 1

5、课设总结... 1

1、课设作品需求分析

魔盒世界是一款多人在线第一人称视角射击游戏,它包括客户端和服务器端两个部分,具备账号登录注册功能,使用MySql数据库保存账户数据(后期通过腾讯云MySql进行存储)。

游戏流程设计

2、课设作品详细设计

客户端单机游戏实现

1、玩家控制设计

2、UI框架设计

UI系统由面板基类PanelBase、面板管理器PanelMgr和多个具体的面板组成,所有的面板都继承自PanelBase,而PanelMgr提供打开某个面板、关闭某个面板的方法。

面板是通过动态加载显示的,这个主要通过PanelMgr去加载显示。面板也设置了层级关系,提示框显示在普通面板的上面,定义了一个PanelLayer类型的枚举来指定面板的层级。整个UI框架实现了代码界面分离。

服务器端设计

3、设计数据库

数据库设计比较简单,新建了一个boxworld数据库,然后添加了user和player表。User表用来保存以后账号和密码,而player表用来保存角色数据。

客户端网络模块设计

3、课设作品编程实现

3.1场景搭建

场景主要有两大部分,这两部分是左右对称的,首先设计一部分场景然后旋转拼凑就可以了。

如图整体情况。

整个场景主要是由一个简模做的地形,然后加入水,添加石头、加入花草树木、在水的两边架上一座桥,在水的周围添加木桩。

3.2角色控制

玩家主要是通过刚体组件来进行移动的,通过Input.GetButton(“Jump”)控制跳跃,Input.GetAxis(“Horizontal”)和Input.GetAxis(“Vertical”)控制玩家移动。

核心代码如下:

void Update (){//技能控制玩家移动速度if(PlayerSkillEffect.instance.runBtnIsOn){moveSpeed = 6;}else{moveSpeed = 2.0f;}Move ();Look ();/*每隔100ms发送一次位置同步信息*/if (Time.time - lastSendInfoTime > 0.1f){SendUnitInfo ();lastSendInfoTime = Time.time;}//判断鼠标是否在UI上面,如果是就显示鼠标,否在不显示if (EventSystem.current.IsPointerOverGameObject()){//显示鼠标但是不能攻击Cursor.visible = true;}else{//不显示鼠标,并且可以攻击Cursor.visible = false;LeftAttack();}}void Move (){bool jump = Input.GetButton ("Jump");Vector3 dir = new Vector3 (Input.GetAxis ("Horizontal"), 0, Input.GetAxis ("Vertical")); if (IsGrounded ()){if (dir.magnitude == 0){if (anim.GetCurrentAnimatorStateInfo (0).IsName ("Move"))anim.speed = 0;}else{anim.speed = 1;if (dir.magnitude > 1)dir.Normalize ();Vector3 localDir = transform.TransformDirection (dir);rb.velocity = localDir * moveSpeed;anim.SetFloat ("moveSpeed", dir.magnitude * moveSpeed);}if (jump){rb.velocity = new Vector3 (rb.velocity.x, jumpPower, rb.velocity.z);}}else{if (anim.GetCurrentAnimatorStateInfo (0).IsName ("Move"))anim.speed = 0;}}bool IsGrounded (){  return Physics.CheckBox (transform.position + Vector3.up * 0.1f, new Vector3 (0.2f, 0.2f, 0.2f), Quaternion.identity, 256);}void Look (){transform.Rotate (new Vector3 (0, Input.GetAxis ("Mouse X") * rotSpeed, 0));float rotationX = head.localEulerAngles.x;rotationX -= Input.GetAxis ("Mouse Y") * rotSpeed;if (rotationX > 180)rotationX -= 360;rotationX = Mathf.Clamp (rotationX, -80f, 40f);head.localEulerAngles = new Vector3 (rotationX, 0, 0); }void LeftAttack (){/*攻击间隔等待完毕就装填箭矢*/if (holdArrow == null && Time.time - lastLAttTime > intervalLAtt){if(PlayerSkillEffect.instance.redBtnIsOn){holdArrow = Instantiate(redArrowPrefab, muzzle.transform.position, muzzle.transform.rotation);}else if(PlayerSkillEffect.instance.blueBtnIsOn){holdArrow = Instantiate(blueArrowPrefab, muzzle.transform.position, muzzle.transform.rotation);}else{holdArrow = Instantiate(arrowPrefab, muzzle.transform.position, muzzle.transform.rotation);}holdArrow.transform.SetParent (muzzle);//归零蓄力时间leftHoldtime = 0; }if (holdArrow == null)return; /*绘制轨迹预判*/GetAimTrail (Mathf.Clamp (leftHoldtime, 0.5f, 2) * 10, holdArrow.transform.position); /*鼠标按下蓄力*/if (Input.GetMouseButton (0)){//在按下的第一帧发送蓄力协议if (leftHoldtime == 0)SendHoldInfo ();//累计蓄力时间leftHoldtime += Time.deltaTime;/*播放蓄力动作,箭矢往后拉*/holdArrow.transform.localPosition = Vector3.Lerp (holdArrow.transform.localPosition, new Vector3 (0, 0, -0.1f), Time.deltaTime);} /*当松开鼠标则执行发射动作*/if (Input.GetMouseButtonUp (0)){/*不可跳过蓄力状态执行*/ if (leftHoldtime > 0){//添加刚体,因为当父物体和子物体都存在刚体的时候,子物体不会随着父物体移动Rigidbody harb = holdArrow.AddComponent<Rigidbody> ();harb.useGravity = false;harb.constraints = RigidbodyConstraints.FreezeRotation;//发送协议SendShootInfo (rb.velocity.x, rb.velocity.y, rb.velocity.z);//脱离父物体holdArrow.transform.SetParent (null);//添加速度holdArrow.GetComponent<Arrow> ().Launch (this.gameObject, leftHoldtime, rb.velocity);//重置箭矢装填lastLAttTime = Time.time;holdArrow = null;}} }

3.3游戏UI设计

一共设计了七个UI面板,也就是游戏一共有七个不同界面,这些面板是通过动态进行加载的,在合适的时候进行显示和不显示。

3.4添加声音

整个游戏主要包含背景音乐,玩家射击音效,玩家受伤音效,玩家死亡音效,敌人受伤音效,敌人死亡音效。

//音效

public AudioClip audioClipDead;

public AudioClip audioClipInjured;

private AudioSource audioSource;

/*播放受伤音效*/

audioSource.spatialBlend = 1;

audioSource.PlayOneShot(audioClipInjured);

3.5添加粒子特效

整个游戏主要包含玩家受伤掉血特效,玩家死亡特效,敌人掉血特效,敌人死亡特效,箭特效,技能特效,玩家包含4个技能,分别是通过按下Q键,可以发送火箭,这个火箭可以对敌人造成致命的伤害,敌人被射中将会出现被燃烧的效果,一箭致命。按下E键玩家可以发射冰箭,敌人会造成严重伤害,产生相应蓝色特效,按下R键,玩家可以回血,这个时候玩家头顶会显示回血值。按下T键,玩家可以加速移动。

4、课设作品测试

到这里一个玩家的测试就结束了,现在测试多个玩家。

5、课设总结

这次课设做的时间应该算是最长的了,差不多8月初就开始做了,当然没有一整天的时间去做这个,每天都是在考研复习后开始搞,不过到了后期差不多就全身心搞这个了,整个游戏的客户端难度不大,服务器端难度是最大的,花费时间也是最多的。通过完成这个课设让我的网络游戏开发能力得到了极大的提升,对于我找工作提供了项目支撑,这个项目还有很多地方考研完善的,还能继续改进,继续添加功能,通过一步一步的加大难度自己的收获也越来越多,虽然复杂的也不断上升,代码量不断增加,代码的逻辑越来越复杂,但是,我也还是会不断的去尝试添加更多的功能,让它看上去像一个真正的网络游戏,而不是demo型的,带有各种bug的玩物。项目变大了,也就体会到变量命名的重要性了,知道写好注释的重要性了,写到后面忘了前面,自己前面写了什么,怎么写的都会记不起来了。整个项目明显不是一下子就做出来的,必须通过不断重构,不断迭代才能做好。代码的可扩展性和架构是如此的重要,写代码前不好好搭框架,而是想到什么写什么,后面根本就无法写,最后只能从头再来。相信有了这次课设的基础,能够在未来开发出一款出色的网络游戏。

下载链接:https://download.csdn.net/download/weixin_44350205/12865529

unity实现网络对战游戏相关推荐

  1. Unity编写冰球对战游戏 2D版

    Unity编写冰球对战游戏 2D版 Unity是一款非常方便.简洁.低成本的一款游戏引擎.在这里,向大家介绍这样用Unity这个引擎编写冰球对战游戏 因为Unity这个引擎可以编写3D游戏 ,同样的也 ...

  2. Java swing + socket 写的一个五子棋网络对战游戏

    自从开始接触Swing以来,就喜欢写写各种管理系统,写多了就萌生了一种类似于实时在线对战的游戏,经过一番构思后就开始着手设计这个网络对战版本的五子棋了. 游戏代码包含两部分,常规的C/S模式(C代表客 ...

  3. [内附完整源码和文档] 基于Qt5的国际跳棋双人网络对战游戏

    一.软件用途 本软件是一个国际跳棋小游戏,使用Qt5编写,实现了国际跳棋游戏的双人网络对战版,以及任意局面的输入功能. 二.运行方式 安装Qtcreater之后,将源代码拷贝至本机并运行Qtcreat ...

  4. 网络对战游戏开发 从零开始(一)

    效果以及结构如图: 主要技术要点:运用Photon技术实现网络部分,界面用photoshop运用一些高斯模糊.描边.内外发光.渐变叠加实现如图的效果,运用异步加载场景. 加载动画运用粒子特效. usi ...

  5. 毕设开发总结-3D游戏框架及网络对战游戏的开发(1)

    小序 毕业设计终于接近尾声了,一个周末都没有继续写代码,正好有一个经验分享,所以把PPT的总结报告转写成一篇blog,希望得到高手们的指点.同时也希望能给还在读书的师弟师妹们一些建议和启发吧.同时,也 ...

  6. Unity网络多玩家游戏开发教程(上册)

    Unity网络多玩家游戏开发教程(上册) 试读文档下载地址:http://pan.baidu.com/s/1jGwwxam Unity作为强大的游戏开发平台,为网络游戏的的开发提供大量的组件和API. ...

  7. unity基于NetWork的局域网对战游戏制作

    现在的游戏大体分为2种,要么就是单机游戏,要么就是联网游戏.像现在比较火的游戏,比如手机游戏王者荣耀,比如端游LOL,这些都是联网游戏.再比如求生之路系列,鬼泣系列,生化危机系列这些都是单机游戏.但是 ...

  8. 你们要的Unity联网对战游戏小Demo

    前言 开发3D游戏听起来门槛很高,但是Unity的出现让门槛大大降低.开发联网实时对战的3D游戏门槛就更高,因为即便熟悉掌握了Unity的开发技术,联网的游戏还要涉及到熟悉网络协议栈.掌握后端知识以及 ...

  9. Unity联网对战游戏小Demo

    前言 开发3D游戏听起来门槛很高,但是Unity的出现让门槛大大降低.开发联网实时对战的3D游戏门槛就更高,因为即便熟悉掌握了Unity的开发技术,联网的游戏还要涉及到熟悉网络协议栈.掌握后端知识以及 ...

最新文章

  1. 在线看板Leangoo实践
  2. 大雁蛋人工孵化的方法_大鹅繁殖有哪些方法,您了解吗?
  3. 【 FPGA 】半带 FIR 滤波器(Half-band FIR Filter)
  4. PO BO VO DTO POJO DAO概念及其作用(附转换图)
  5. UOJ #584. 天天去哪吃
  6. NAT类型及检测方法
  7. 转帖:ESB(Enterprise Service Bus)
  8. mysql in优化_MySQL的一次优化记录 (IN子查询和索引优化)
  9. 小县城里的体制内剩女:一个日益庞大却被悬置的群体?
  10. 微服务(MicroServices)
  11. 7 分钟全面了解位运算
  12. HDU2010 水仙花数【进制】
  13. 隔离 docker 容器中的用户-------分享链接
  14. Flash版Logo语言9.83
  15. LeetCode114--词典中最长的单词、最短补全词、宝石与石头
  16. 直播电商平台开发,点击让窗口抖动动画效果
  17. 泰坦尼克号入门学习(思维导图)
  18. CSP-S 2022题目与CSP-J 2022题目
  19. 将下列计算机中文翻译成英文,急...将计算机类英文翻译成中文
  20. windows电脑无法上网问题排查

热门文章

  1. macbook禁用键盘_一个禁用mac内置键盘的方法
  2. 计算机设计基础第2次性考,03812 计算机设计基础(实践)
  3. BAM部署失败 - 未能加载”AdomdClient”或它的某一个依赖项。系统找不到指定的文件...
  4. IPAD如何退出恢复模式
  5. 《红色警戒2·尤里复仇》-第二章 秒建(上)
  6. linux命令清理磁盘空间,linux环境下清理系统磁盘空间命令详解
  7. 在公司局域网内安装无线路由器的连接设置方法
  8. 海岛奇兵无法连接服务器维护,海岛奇兵无法登陆怎么办 糟糕服务器大吐槽
  9. 最新变现小程序源码(虚拟资源变现知识付费小程序/激励广告流量主)
  10. 1225(微分中值定理,导数应用,二叉树)