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. 子弹同步到客户端

  1. 首先在NetWorkManager 中添加 需要生成的子弹
  2. 所有的子弹都需要是服务端生成,然后同步到各个客户端。在生成子弹的fire方法前加上【Command】然后方法名更改为CmdFire(),表示这个方法是在服务端调用。
  3. 给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添加血条显示

  1. 创建Slider
  2. Slider 的Canvas 加上LookAtCamera 脚本,防止血条跟随Player旋转
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class LookAtCamera : MonoBehaviour
{void Update(){transform.LookAt(Camera.main.transform);}
}
  1. 编写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 多人联机游戏(一)相关推荐

  1. unity多人联机插件_Mirror ---Unity多人联机游戏API(一)

    Mirror是Unity 商店的资源: https://assetstore.unity.com/packages/tools/network/mirror-129321 Mirror是 high l ...

  2. arcalet云服务平台支持Unity3D开发实时多人联机游戏

    arcalet 云服务平台支持 Unity3D 开发实时多人联机游戏 打破旧有的实时联机开发模式,全新的云端在线游戏平台带来更敏捷.简单及有 效的帮助开发者减少开发时间与成本. 开发联机游戏除了要解决 ...

  3. 多人联机游戏中联网模块(Socket)的设计和各种问题解决

    这是我自己做的一个多人联机游戏中网络部分的总结.全部为自己全新做的,没用开源软件(有一个网络游戏开源软件Raknet).目的是写一个属于自己的可靠网络模块,修改.扩展后在很多地方都能用得着.也想自己从 ...

  4. 多人联机游戏是如何设计的,好的MMORPG游戏需要哪些方面

    游戏世界和剧情设计: 一个好的MMORPG需要一个有趣的游戏世界和引人入胜的剧情.开发者需要投入大量时间和精力来设计游戏世界和剧情,包括地理.历史.文化.角色设计等. 游戏平衡性设计 MMORPG需要 ...

  5. unity多人联机插件_别在纠结“后端”开发了,联机小游戏还可以这样做!

    本篇文章要感谢「银笑的尤里」从 9月28日腾讯云深圳「游戏开发的超"音""速"」沙龙发来了重磅消息,下面 Shawn 重点介绍对个人开发者惊喜的"MG ...

  6. Unity多人联机的实现

    实现多人联机的方法有几种,具体取决于你的具体需求.以下是一些选项: Unity Multiplayer:Unity有自己的内置网络解决方案,称为Unity Multiplayer(以前称为UNET). ...

  7. unity多人联机插件_Unity Multiplayer多人联网全新升级

    Unity作为全球开发者信赖的开发平台,也为大家提供了包括Unity Ads广告.Analytics分析.Performance Reporting性能报告及Multiplayer多人联网等在内的多个 ...

  8. unity多人联机插件_Unity3D多人协作开发环境搭建

    多人协作 说到多人协作开发,大家都会想到要使用版本控制工具来管理项目,当然最常用的要数SVN和Git了,但是SVN管理Unity3D项目的确有一些不尽人意的地方. 比如:两个人修改了同一个场景,SVN ...

  9. C语言多人联机游戏,CC:Online命令与征服多人游戏服务器官网介绍

    命令与征服系列的官方对战服务器目前基本全部停运,我们在此提供玩家自制的对战平台C&C:Online官网介绍.C&C:Online支持所有5款被GameSpy关服影响到的的命令与征服系列 ...

  10. 基于Unity的弹幕游戏多人联机尝试

    给一个已经定型的游戏添加哪怕是一个小特性,都是棘手的事情,很容易引入新的bug,或者破坏已有的功能.复杂的联网更是如此,它涉及到的改动几乎遍及系统的方方面面.玩家的一举一动都需要在其他人的屏幕上展现出 ...

最新文章

  1. 人工智能商业化的重点:语音交互和人脸识别
  2. AngularJS基本知识点
  3. JavaScript解析顺序和变量作用域
  4. NO.47 确定项目要完成的需求列表
  5. jmeter tps指标在哪里看_性能之路——性能测试连载 (3)-性能指标
  6. js判断浏览器是否安装或启用了flash的方法总结
  7. java中堆 栈的英文_Java中的栈和堆
  8. 新浪新闻动态网页爬取+热点词云分析
  9. 学习编译原理遇到的问题
  10. 08-【go】go语言中的*和的使用方法
  11. Windows小技巧 -- 已连接wifi密码查看
  12. 聚观早报 | 明年起手机预装APP均可卸载;爱奇艺VIP会员再次涨价
  13. 多彩M618XSD垂直立式人体工学鼠标拆解
  14. i7处理器好吗_i5和i7区别有多大,性能差距大吗?i5-9400F和i7-9700F的区别对比
  15. DevOps工具链 - 2021
  16. HTML knowledge (learned through crawlers)
  17. 【虚拟试衣论文笔记】CP-VTON+: Clothing Shape and Texture Preserving Image-Based Virtual Try-On
  18. hmailserver创建MySQL失败_[hmailserver]新建用户与Email错误
  19. 二叉树-递归计算某节点的层数/深度
  20. 大咖论道 | 2019中国互联网大会上他们都说了啥……

热门文章

  1. UVaOJ 12304 2D Geometry 110 in 1!
  2. Silverlight C# 游戏开发:草动系统(一)简单的草动
  3. web安全:X老师上课讲了Robots协议,小宁同学却上课打了瞌睡,赶紧来教教小宁Robots协议是什么吧
  4. 重装win10系统后不能上网如何解决?
  5. 如何购买阿里云香港服务器?又有什么什么好处呢?
  6. sql server 存储过程中 SET NOCOUNT ON是什么意思?
  7. win7无法自动获取dns服务器地址,Windows7系统DNS服务器故障怎么解决?
  8. Global Tracking Transformers 详细解读
  9. GraphQL Go,graphql基本知识,go-graphql使用
  10. mysql--学生表