unity实现网络对战游戏
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、课设作品详细设计
UI系统由面板基类PanelBase、面板管理器PanelMgr和多个具体的面板组成,所有的面板都继承自PanelBase,而PanelMgr提供打开某个面板、关闭某个面板的方法。
数据库设计比较简单,新建了一个boxworld数据库,然后添加了user和player表。User表用来保存以后账号和密码,而player表用来保存角色数据。
3、课设作品编程实现
3.1场景搭建
场景主要有两大部分,这两部分是左右对称的,首先设计一部分场景然后旋转拼凑就可以了。
整个场景主要是由一个简模做的地形,然后加入水,添加石头、加入花草树木、在水的两边架上一座桥,在水的周围添加木桩。
3.2角色控制
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.PlayOneShot(audioClipInjured);
3.5添加粒子特效
4、课设作品测试
5、课设总结
下载链接:https://download.csdn.net/download/weixin_44350205/12865529
unity实现网络对战游戏相关推荐
- Unity编写冰球对战游戏 2D版
Unity编写冰球对战游戏 2D版 Unity是一款非常方便.简洁.低成本的一款游戏引擎.在这里,向大家介绍这样用Unity这个引擎编写冰球对战游戏 因为Unity这个引擎可以编写3D游戏 ,同样的也 ...
- Java swing + socket 写的一个五子棋网络对战游戏
自从开始接触Swing以来,就喜欢写写各种管理系统,写多了就萌生了一种类似于实时在线对战的游戏,经过一番构思后就开始着手设计这个网络对战版本的五子棋了. 游戏代码包含两部分,常规的C/S模式(C代表客 ...
- [内附完整源码和文档] 基于Qt5的国际跳棋双人网络对战游戏
一.软件用途 本软件是一个国际跳棋小游戏,使用Qt5编写,实现了国际跳棋游戏的双人网络对战版,以及任意局面的输入功能. 二.运行方式 安装Qtcreater之后,将源代码拷贝至本机并运行Qtcreat ...
- 网络对战游戏开发 从零开始(一)
效果以及结构如图: 主要技术要点:运用Photon技术实现网络部分,界面用photoshop运用一些高斯模糊.描边.内外发光.渐变叠加实现如图的效果,运用异步加载场景. 加载动画运用粒子特效. usi ...
- 毕设开发总结-3D游戏框架及网络对战游戏的开发(1)
小序 毕业设计终于接近尾声了,一个周末都没有继续写代码,正好有一个经验分享,所以把PPT的总结报告转写成一篇blog,希望得到高手们的指点.同时也希望能给还在读书的师弟师妹们一些建议和启发吧.同时,也 ...
- Unity网络多玩家游戏开发教程(上册)
Unity网络多玩家游戏开发教程(上册) 试读文档下载地址:http://pan.baidu.com/s/1jGwwxam Unity作为强大的游戏开发平台,为网络游戏的的开发提供大量的组件和API. ...
- unity基于NetWork的局域网对战游戏制作
现在的游戏大体分为2种,要么就是单机游戏,要么就是联网游戏.像现在比较火的游戏,比如手机游戏王者荣耀,比如端游LOL,这些都是联网游戏.再比如求生之路系列,鬼泣系列,生化危机系列这些都是单机游戏.但是 ...
- 你们要的Unity联网对战游戏小Demo
前言 开发3D游戏听起来门槛很高,但是Unity的出现让门槛大大降低.开发联网实时对战的3D游戏门槛就更高,因为即便熟悉掌握了Unity的开发技术,联网的游戏还要涉及到熟悉网络协议栈.掌握后端知识以及 ...
- Unity联网对战游戏小Demo
前言 开发3D游戏听起来门槛很高,但是Unity的出现让门槛大大降低.开发联网实时对战的3D游戏门槛就更高,因为即便熟悉掌握了Unity的开发技术,联网的游戏还要涉及到熟悉网络协议栈.掌握后端知识以及 ...
最新文章
- 在线看板Leangoo实践
- 大雁蛋人工孵化的方法_大鹅繁殖有哪些方法,您了解吗?
- 【 FPGA 】半带 FIR 滤波器(Half-band FIR Filter)
- PO BO VO DTO POJO DAO概念及其作用(附转换图)
- UOJ #584. 天天去哪吃
- NAT类型及检测方法
- 转帖:ESB(Enterprise Service Bus)
- mysql in优化_MySQL的一次优化记录 (IN子查询和索引优化)
- 小县城里的体制内剩女:一个日益庞大却被悬置的群体?
- 微服务(MicroServices)
- 7 分钟全面了解位运算
- HDU2010 水仙花数【进制】
- 隔离 docker 容器中的用户-------分享链接
- Flash版Logo语言9.83
- LeetCode114--词典中最长的单词、最短补全词、宝石与石头
- 直播电商平台开发,点击让窗口抖动动画效果
- 泰坦尼克号入门学习(思维导图)
- CSP-S 2022题目与CSP-J 2022题目
- 将下列计算机中文翻译成英文,急...将计算机类英文翻译成中文
- windows电脑无法上网问题排查
热门文章
- macbook禁用键盘_一个禁用mac内置键盘的方法
- 计算机设计基础第2次性考,03812 计算机设计基础(实践)
- BAM部署失败 - 未能加载”AdomdClient”或它的某一个依赖项。系统找不到指定的文件...
- IPAD如何退出恢复模式
- 《红色警戒2·尤里复仇》-第二章 秒建(上)
- linux命令清理磁盘空间,linux环境下清理系统磁盘空间命令详解
- 在公司局域网内安装无线路由器的连接设置方法
- 海岛奇兵无法连接服务器维护,海岛奇兵无法登陆怎么办 糟糕服务器大吐槽
- 最新变现小程序源码(虚拟资源变现知识付费小程序/激励广告流量主)
- 1225(微分中值定理,导数应用,二叉树)