开发多人同步项目时,物体Transform信息同步分为两种:

  1. Player(客户端自主控制,服务器广播,其他客户端刷新)
  2. NPC(自身带有AI逻辑,服务器广播其Transform、Animator属性,所有客户端刷新)
  3. 可接力操作物体(如Aclient 将一个物体交给BClient)

前两种情况,网上教程很多,不再赘述。

第三种情况,没有找到相关介绍,而且官网介绍也有一个坑。

Network Transform - Mirrorhttps://mirror-networking.gitbook.io/docs/components/network-transform这里说到

By default, Network Transform is server-authoritative unless you check the box for Client Authority. Client Authority applies to player objects as well as non-player objects that have been specifically assigned to a client, but only for this component. With this enabled, position changes are send from the client to the server.

实践中:场景创建Cube添加NetworkTransform(自动添加NetworkIdentity)勾选ClientAuthority

打包测试后发现,客户端和服务器都自能各自移动,却不同步位置。

解决方案:仍然勾选该选项,并且在当前操作client请求权限

注意Command请求只能在player上,所以该脚本应该放挂在player上

using Mirror;
using UnityEngine;public class AuthorityAndOwnerShip : NetworkBehaviour
{private GameObject prefab;void Update() {bool isplayerDead = false;if (isplayerDead && base.hasAuthority){CmdRequestRespawn();}RequestOwnerShipOnClick();}[Command]private void CmdRequestRespawn() {NetworkServer.Spawn(prefab,GetComponent<NetworkIdentity>().connectionToClient);}private void RequestOwnerShipOnClick() {if (!base.hasAuthority){return;}if (!Input.GetMouseButton(2)){return;}RaycastHit hit;if (Physics.Raycast(Camera.main.ScreenPointToRay(Input.mousePosition),out hit,100)){NetworkIdentity id = hit.collider.GetComponent<NetworkIdentity>();if (id != null && !id.hasAuthority){CmdRequestAuthority(id);}}}[Command]private void CmdRequestAuthority(NetworkIdentity id){id.RemoveClientAuthority();id.AssignClientAuthority(base.connectionToClient);}
}

为了验证该效果,在Cube 上挂载一个验证脚本

using Mirror;
using UnityEngine;public class ChangeColorOnAuthority : NetworkBehaviour
{public override void OnStartAuthority(){base.OnStartAuthority();GetComponent<MeshRenderer>().material.color = Color.blue;}public override void OnStopAuthority(){base.OnStopAuthority();GetComponent<MeshRenderer>().material.color = Color.white;}void Update() {if (Input.GetMouseButton(1)){transform.Rotate(Vector3.down, Input.GetAxis("Mouse X"));transform.Rotate(Vector3.left, -Input.GetAxis("Mouse Y"));}}
}

链接后,在client上用鼠标中键点击cube、接收到权限后会变成蓝色。此时点击鼠标右键并滑动。旋转角度就会同步回服务器了。

注意:

一旦客户端掉线,客户端所拥有的所有物体都会被销毁。

效果视频:

mirror 客户端操作权限

Unity + Mirror NetworkTransform 从客户端到服务器相关推荐

  1. unity Mirror使用心得一(玩家角色创建,控制,及其攻击其他玩家的血量同步设置)

    先分享下个人mirrordemo 的github : https://github.com/IsaWinding/MirrorDemo.git mirror 的官方下载地址: https://asse ...

  2. Unity + Mirror实现原创卡牌游戏局域网联机

    资源下载地址 局域网联机插件 Mirror:Mirror | 网络 | Unity Asset Store 本地客户端测试多人游戏(不用打包)插件 : ParrelSync Mirror官方文档:Ge ...

  3. [Unity Mirror] Network Discovery

    英文原文: https://mirror-networking.gitbook.io/docs/components/network-discovery   假设你在一个朋友旁边.他以主持人模式开始游 ...

  4. [Unity Mirror] 作弊与反作弊

    简介   早在 2009-2015 年,在从事 Mirror 和 uMMORPG 工作之前,我尝试通过对 MMO 进行逆向工程和出售Bots来谋生来了解 MMO.我将根据我们 Discord 中的问题 ...

  5. [Unity Mirror] General

      Mirror 是一个为 Unity 游戏构建多人游戏功能的系统.它建立在较低级别的传输实时通信层之上,并处理多人游戏所需的许多常见任务.传输层支持任何类型的网络拓扑,而 Mirror 是服务器权威 ...

  6. [Unity] 关于Unity Mirror的一点体会

    最近一直在研究使用Mirror,因为是第一次接触所谓的Hight Level API NetCode,还挺有兴趣的.不过我研究了一段时间后,觉得这个东西恐怕不太适合大项目,或者正规的CS模式的网络游戏 ...

  7. Unity+Mirror实现虚拟现实下的多人连接

    实现虚拟现实环境中的多人连接顾名思义分为两步,首先通过Mirror插件实现3D空间下的多人连接基础功能,其后调整虚拟现实相关内容,最后添加虚拟化身并进行匹配.本篇文章也将从以下三个方面依次完成(使用设 ...

  8. [Unity Mirror] TCP 和 UDP

      TCP 和 UDP 都是用于通过 Internet 发送信息的协议 - 事实上,它们是世界上最常用的两种 Internet 协议:TCP 是在 1970 年代开发的,而 UDP 是在 1980 年 ...

  9. 手游遭遇兼容性、客户端、服务器、防外挂问题如何做?

    手游遭遇兼容性.客户端.服务器.防外挂问题如何做? 本文来自Game Look,不代表本平台观点与立场(好文章分享) 这份白皮书不仅给出了目前国内手游产品遭遇的技术上的主要问题,也给出了一个推荐给开发 ...

最新文章

  1. hibernate动态表名映射
  2. Python Day34
  3. 物联网安全有哪些注意事项
  4. 【Python】import自己的模块报错
  5. 2020年中国工业品B2B行业研究报告
  6. jsp页面执行java语法,获取的值在页面调用
  7. linux固定dns怎么设置,Linux之如何进行固定IP、DNS等设置
  8. c语言计算器小程序方案,C语言计算器小程序(源代码+实习报告).docx
  9. 网易云音乐缓存转换至mp3(Python实现)
  10. ALM11(QC11)官方中文安装包下载
  11. execution表达式里写多个条件
  12. CCNA考试题库中英文翻译版及答案5
  13. mysqldump set-gtid-purged=OFF的问题
  14. 干货分享!软考中高项案例分析10大管理领域理论背诵要点
  15. 云计算——Google云计算原理与应用(Google文件系统GFS)
  16. 打破传统的控制理论之(控制理论+深度学习)
  17. ubuntu中,出现Failed to fetch http://…..时,需要换源
  18. 一款好用的视频转换gif的小软件——抠抠视频秀
  19. oracle 经纬度的数据类型,4.2 SDO_GEOMETRY类型、属性和值
  20. “以虫为名”?新华三这波发布有点儿别出心裁……

热门文章

  1. 内核自带的基于GPIO的LED驱动学习(一)
  2. excel 用公式查找单元格
  3. @渗透测试之信息收集
  4. 李永乐复习全书线性代数 第二章 矩阵
  5. 阿里云服务器关闭mysql数据库_mysql - 阿里云服务器数据库自动关闭,怎么解决...
  6. ROM修改---修改CPU信息和GPU信息
  7. 「团队管理」UCD领域如何带领前端开发团队
  8. 安全的将动态磁盘转为基本磁盘
  9. Command-click是什么意思?
  10. 牛校网php,升学指导网