Unity 多人联机游戏(一)
1. 创建NetWorkManager 空对象管理联网
新建一个场景,场景下挂载一个空的对象NetWorkManager,为其添加NetWorkManager 和 NetworkManagerHUD 组件
2. 添加Player 对象
- 添加一个Player 对象 并将其生成为预制体Prefab
- 挂载PlayerController 脚本 控制对象的旋转和移动
3. 实现客户端和服务端对象同步
- 加载预制体后发现服务端和客户端的两个player同时在移动。解决方案:将playercontroller 继承 NetworkBehaviour, 其中有一个isLocalPlayer 属性,如果不是本地player就不做任何操作return.
- 同步两边的位置:在player中挂载NetworkTransform,就能实现同步功能
4. 给本地对象改变颜色
public override void OnStartLocalPlayer(){//只在本地对象初始化完成后调用GetComponent<MeshRenderer>().material.color = Color.blue;}
5. 控制主角的射击
按下空格键 发出子弹
private void fire(){GameObject bullet = Instantiate(bulletPrefab, bulletPos);bullet.GetComponent<Rigidbody>().velocity = bullet.transform.forward * 10f;Destroy(bullet, 2);}
6. 子弹同步到客户端
- 首先在NetWorkManager 中添加 需要生成的子弹
- 所有的子弹都需要是服务端生成,然后同步到各个客户端。在生成子弹的fire方法前加上【Command】然后方法名更改为CmdFire(),表示这个方法是在服务端调用。
- 给bullet子弹对象添加NetWorkTransform ,同步子弹
[Command]private void CmdFire(){GameObject bullet = Instantiate(bulletPrefab, bulletPos);bullet.GetComponent<Rigidbody>().velocity = bullet.transform.forward * 10f;Destroy(bullet, 2);//同步到各个客户端NetworkServer.Spawn(bullet);}
7. 给Player添加血条显示
- 创建Slider
- Slider 的Canvas 加上LookAtCamera 脚本,防止血条跟随Player旋转
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class LookAtCamera : MonoBehaviour
{void Update(){transform.LookAt(Camera.main.transform);}
}
- 编写Health逻辑 使其与slider数据绑定
public class Health : MonoBehaviour
{// 固定血量public int bloodCount = 100;public int allBlood = 100;public Slider slider;public void takeDemage(){//受到伤害if (bloodCount > 0){bloodCount -= 10;slider.value = bloodCount / (float)allBlood;}}
}
8. 同步血条和血量
比较坑的一点是,你会发现上面第7步做完后,服务端的血量一直在掉,然而客户端的血量要么不掉,要么掉的很少。这是因为咱们的开火逻辑是服务端在处理,由于网络和传输的问题,不管怎么样服务端执行的一定要比客户端快,当服务端的碰撞完了后销毁了这个对象,客户端就没有这个对象了,从而不能时效的进行碰撞检测,减少血量。
解决方法:血量减少的逻辑也让其只在服务端处理,客户端同样只做同步操作。
public class Health : NetworkBehaviour
{// 同步血量[SyncVar(hook ="OnChangeHealth")]public int bloodCount = 100;public int allBlood = 100;public Slider slider;public void takeDemage(){if (!isServer) return;//受到伤害if (bloodCount > 0){bloodCount -= 10;}}//检测到SncVar 标准的变量变化后,就会执行 OnChangeHealth 这个方法void OnChangeHealth(int health){slider.value = bloodCount / (float)allBlood;}
}
Unity 多人联机游戏(一)相关推荐
- unity多人联机插件_Mirror ---Unity多人联机游戏API(一)
Mirror是Unity 商店的资源: https://assetstore.unity.com/packages/tools/network/mirror-129321 Mirror是 high l ...
- arcalet云服务平台支持Unity3D开发实时多人联机游戏
arcalet 云服务平台支持 Unity3D 开发实时多人联机游戏 打破旧有的实时联机开发模式,全新的云端在线游戏平台带来更敏捷.简单及有 效的帮助开发者减少开发时间与成本. 开发联机游戏除了要解决 ...
- 多人联机游戏中联网模块(Socket)的设计和各种问题解决
这是我自己做的一个多人联机游戏中网络部分的总结.全部为自己全新做的,没用开源软件(有一个网络游戏开源软件Raknet).目的是写一个属于自己的可靠网络模块,修改.扩展后在很多地方都能用得着.也想自己从 ...
- 多人联机游戏是如何设计的,好的MMORPG游戏需要哪些方面
游戏世界和剧情设计: 一个好的MMORPG需要一个有趣的游戏世界和引人入胜的剧情.开发者需要投入大量时间和精力来设计游戏世界和剧情,包括地理.历史.文化.角色设计等. 游戏平衡性设计 MMORPG需要 ...
- unity多人联机插件_别在纠结“后端”开发了,联机小游戏还可以这样做!
本篇文章要感谢「银笑的尤里」从 9月28日腾讯云深圳「游戏开发的超"音""速"」沙龙发来了重磅消息,下面 Shawn 重点介绍对个人开发者惊喜的"MG ...
- Unity多人联机的实现
实现多人联机的方法有几种,具体取决于你的具体需求.以下是一些选项: Unity Multiplayer:Unity有自己的内置网络解决方案,称为Unity Multiplayer(以前称为UNET). ...
- unity多人联机插件_Unity Multiplayer多人联网全新升级
Unity作为全球开发者信赖的开发平台,也为大家提供了包括Unity Ads广告.Analytics分析.Performance Reporting性能报告及Multiplayer多人联网等在内的多个 ...
- unity多人联机插件_Unity3D多人协作开发环境搭建
多人协作 说到多人协作开发,大家都会想到要使用版本控制工具来管理项目,当然最常用的要数SVN和Git了,但是SVN管理Unity3D项目的确有一些不尽人意的地方. 比如:两个人修改了同一个场景,SVN ...
- C语言多人联机游戏,CC:Online命令与征服多人游戏服务器官网介绍
命令与征服系列的官方对战服务器目前基本全部停运,我们在此提供玩家自制的对战平台C&C:Online官网介绍.C&C:Online支持所有5款被GameSpy关服影响到的的命令与征服系列 ...
- 基于Unity的弹幕游戏多人联机尝试
给一个已经定型的游戏添加哪怕是一个小特性,都是棘手的事情,很容易引入新的bug,或者破坏已有的功能.复杂的联网更是如此,它涉及到的改动几乎遍及系统的方方面面.玩家的一举一动都需要在其他人的屏幕上展现出 ...
最新文章
- 人工智能商业化的重点:语音交互和人脸识别
- AngularJS基本知识点
- JavaScript解析顺序和变量作用域
- NO.47 确定项目要完成的需求列表
- jmeter tps指标在哪里看_性能之路——性能测试连载 (3)-性能指标
- js判断浏览器是否安装或启用了flash的方法总结
- java中堆 栈的英文_Java中的栈和堆
- 新浪新闻动态网页爬取+热点词云分析
- 学习编译原理遇到的问题
- 08-【go】go语言中的*和的使用方法
- Windows小技巧 -- 已连接wifi密码查看
- 聚观早报 | 明年起手机预装APP均可卸载;爱奇艺VIP会员再次涨价
- 多彩M618XSD垂直立式人体工学鼠标拆解
- i7处理器好吗_i5和i7区别有多大,性能差距大吗?i5-9400F和i7-9700F的区别对比
- DevOps工具链 - 2021
- HTML knowledge (learned through crawlers)
- 【虚拟试衣论文笔记】CP-VTON+: Clothing Shape and Texture Preserving Image-Based Virtual Try-On
- hmailserver创建MySQL失败_[hmailserver]新建用户与Email错误
- 二叉树-递归计算某节点的层数/深度
- 大咖论道 | 2019中国互联网大会上他们都说了啥……
热门文章
- UVaOJ 12304 2D Geometry 110 in 1!
- Silverlight C# 游戏开发:草动系统(一)简单的草动
- web安全:X老师上课讲了Robots协议,小宁同学却上课打了瞌睡,赶紧来教教小宁Robots协议是什么吧
- 重装win10系统后不能上网如何解决?
- 如何购买阿里云香港服务器?又有什么什么好处呢?
- sql server 存储过程中 SET NOCOUNT ON是什么意思?
- win7无法自动获取dns服务器地址,Windows7系统DNS服务器故障怎么解决?
- Global Tracking Transformers 详细解读
- GraphQL Go,graphql基本知识,go-graphql使用
- mysql--学生表