Unity + Mirror NetworkTransform 从客户端到服务器
开发多人同步项目时,物体Transform信息同步分为两种:
- Player(客户端自主控制,服务器广播,其他客户端刷新)
- NPC(自身带有AI逻辑,服务器广播其Transform、Animator属性,所有客户端刷新)
- 可接力操作物体(如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 从客户端到服务器相关推荐
- unity Mirror使用心得一(玩家角色创建,控制,及其攻击其他玩家的血量同步设置)
先分享下个人mirrordemo 的github : https://github.com/IsaWinding/MirrorDemo.git mirror 的官方下载地址: https://asse ...
- Unity + Mirror实现原创卡牌游戏局域网联机
资源下载地址 局域网联机插件 Mirror:Mirror | 网络 | Unity Asset Store 本地客户端测试多人游戏(不用打包)插件 : ParrelSync Mirror官方文档:Ge ...
- [Unity Mirror] Network Discovery
英文原文: https://mirror-networking.gitbook.io/docs/components/network-discovery 假设你在一个朋友旁边.他以主持人模式开始游 ...
- [Unity Mirror] 作弊与反作弊
简介 早在 2009-2015 年,在从事 Mirror 和 uMMORPG 工作之前,我尝试通过对 MMO 进行逆向工程和出售Bots来谋生来了解 MMO.我将根据我们 Discord 中的问题 ...
- [Unity Mirror] General
Mirror 是一个为 Unity 游戏构建多人游戏功能的系统.它建立在较低级别的传输实时通信层之上,并处理多人游戏所需的许多常见任务.传输层支持任何类型的网络拓扑,而 Mirror 是服务器权威 ...
- [Unity] 关于Unity Mirror的一点体会
最近一直在研究使用Mirror,因为是第一次接触所谓的Hight Level API NetCode,还挺有兴趣的.不过我研究了一段时间后,觉得这个东西恐怕不太适合大项目,或者正规的CS模式的网络游戏 ...
- Unity+Mirror实现虚拟现实下的多人连接
实现虚拟现实环境中的多人连接顾名思义分为两步,首先通过Mirror插件实现3D空间下的多人连接基础功能,其后调整虚拟现实相关内容,最后添加虚拟化身并进行匹配.本篇文章也将从以下三个方面依次完成(使用设 ...
- [Unity Mirror] TCP 和 UDP
TCP 和 UDP 都是用于通过 Internet 发送信息的协议 - 事实上,它们是世界上最常用的两种 Internet 协议:TCP 是在 1970 年代开发的,而 UDP 是在 1980 年 ...
- 手游遭遇兼容性、客户端、服务器、防外挂问题如何做?
手游遭遇兼容性.客户端.服务器.防外挂问题如何做? 本文来自Game Look,不代表本平台观点与立场(好文章分享) 这份白皮书不仅给出了目前国内手游产品遭遇的技术上的主要问题,也给出了一个推荐给开发 ...
最新文章
- hibernate动态表名映射
- Python Day34
- 物联网安全有哪些注意事项
- 【Python】import自己的模块报错
- 2020年中国工业品B2B行业研究报告
- jsp页面执行java语法,获取的值在页面调用
- linux固定dns怎么设置,Linux之如何进行固定IP、DNS等设置
- c语言计算器小程序方案,C语言计算器小程序(源代码+实习报告).docx
- 网易云音乐缓存转换至mp3(Python实现)
- ALM11(QC11)官方中文安装包下载
- execution表达式里写多个条件
- CCNA考试题库中英文翻译版及答案5
- mysqldump set-gtid-purged=OFF的问题
- 干货分享!软考中高项案例分析10大管理领域理论背诵要点
- 云计算——Google云计算原理与应用(Google文件系统GFS)
- 打破传统的控制理论之(控制理论+深度学习)
- ubuntu中,出现Failed to fetch http://…..时,需要换源
- 一款好用的视频转换gif的小软件——抠抠视频秀
- oracle 经纬度的数据类型,4.2 SDO_GEOMETRY类型、属性和值
- “以虫为名”?新华三这波发布有点儿别出心裁……