首页 > 其他分享 >unity Mirror网络同步

unity Mirror网络同步

时间:2024-03-22 18:00:12浏览次数:30  
标签:同步 void System Server unity Client Mirror using 客户端

我们直接来剖析,上干货

在github上的主页代码,稍微修改了下:

using System.Collections;
using System.Collections.Generic;
using Mirror;
using UnityEngine;

public class Player : NetworkBehaviour
{
    // Synced automatically //自动同步
    [SyncVar] public int health = 100;
    
    // Lists, Dictionaries, Sets too  列表、字典、集也是如此
   // SyncList<Item> inventory = new SyncList<Item>();
    
    // Server/Client-only code  仅限 ServerClient 的代码
    [Server] void LevelUp() {} //会阻止客户端运行此方法
    [Client] void Animate() {} //会阻止服务端运行此方法
    
    void Update()
    {
        // isServer/isClient for runtime checks  isServerisClient 用于运行时检查
        if (isServer) Heal();  //通过这个标签判断是否是服务端
        if (isClient) Move();  //通过这个标签判断是否是客户端
    }

    private void Move()
    {
        throw new System.NotImplementedException();
    }

    private void Heal()
    {
        throw new System.NotImplementedException();
    }

    // Zero overhead remote calls   零开销远程呼叫
    [Command]   void CmdUseItem(int slot) {} // Client to Server  客户端到服务器
    [ClientRpc] void RpcRespawn() {}         // Server to all Clients  服务器到所有客户端
    [TargetRpc] void Hello() {}              // Server to one Client 服务器到一个客户端
}

经过注释后大部分都已经一目了然了,但是下面这个标签是怎么回事呐?(请移步以下链接了解,我就不再赘述)

关于Unet的[Command]和[ClientRpc],[syncVar]的理解和使用-CSDN博客

总体来说,就是如果你要结合做局域网的东西,一个客户端带有服务器,其他的都是客户端,那么你的代码要嵌套着使用:Commd和ClientRpc(局域网游戏推荐)

如果你要做网络同步类型的网游,需要与服务器强连接的那种,那么你的代码要嵌套着使用:Commd和TargetRpc(不推荐)

这样达到的目的在于一套代码多处可以重复使用(虽然大多数用不着这么做,也不推荐,如果你要做这种游戏,反而不推荐使用这个插件,建议自己根据:skywind3000/kcp: :zap: KCP - A Fast and Reliable ARQ Protocol (github.com)

进行自主封装(推荐)

然后你想要正常使用这个插件,你需要建一个网络对象的空物体,在上面挂载三个脚本:

一般空物体叫:NetworkManager

三个脚本:

NetworkManager、NetworkManagerHUD、KcpTransport

建议加上这个:NetworkPingDisplay(一看这名就知道是干啥的)

标签:同步,void,System,Server,unity,Client,Mirror,using,客户端
From: https://blog.csdn.net/qq_46043095/article/details/136941962

相关文章

  • 【Unity】捕捉PC桌面的插件
    【背景】之前介绍了如何用一款名为uWindowCapture的Unity免费插件在Unity的Canvas上展示PC桌面。经过一段时间的使用,本篇继续分享此插件的一些功能和限制。在此感谢作者Hecomi。【特征和限制】一般局域网络环境只能最多达到15帧的帧率,所以别幻想用来窜流游戏或者看电影......
  • 操作系统综合题之“用记录型信号量机制的wait操作和signal操作写出三个进程的同步代码
    1.问题:假设一个水果赛选系统由三个进程A、B、C组成。进程A每次取一个水果,之后存放在货架F上,F的容量为每次只能存放一个水果。若货架上存放的是苹果则让进程B取出,并存放到苹果箱中;若货架上存放的是菠萝则让进程C取出后,将其存放到菠萝框中(1)列出所需的信号量并初始化(2)请用记录型信......
  • Debezium vs OGG vs Tapdata:如何实时同步 Oracle 数据到 Kafka 消息队列?
    随着信息时代的蓬勃发展,企业对实时数据处理的需求逐渐成为推动业务创新和发展的重要驱动力。在这个快速变化的环境中,许多企业选择将Oracle数据库同步到Kafka,以满足日益增长的实时数据处理需求。本文将深入探讨这一趋势的背后原因,并通过一个真实的客户案例来强调实时性在业务场......
  • Unity解决z冲突(Z-Fighting)的几种方式
    1、在物理上将对象移得更远在大多数情况下,只需增加战斗对象之间的距离就可以解决深度冲突问题。这是最明显的解决方案,但遗憾的是,根据具体情况,并不总是可能的,但如果是的话,那么总是尝试增加对象之间的距离,如果这样做没有任何缺点!UnityZ-Fight示例。2、增加相机的*剪裁*面并减少远......
  • MT2492 16V输入 600KHz 2A DCDC同步降压转换器 航天民芯一级代理
    深圳市润泽芯电子有限公司为航天民芯一级代理描述  MT2492是一款完全集成的高效率产品2A同步整流降压变换器。MT2492在一段时间内高效运行宽输出电流负载范围。该设备提供两种工作模式,即PWM控制和PFM模式切换控制在更宽的工作范围内实现高效率加载。MT2492需要最少数量的......
  • 多线程并发聊天室简单实现代码详解 -- 涉及网络编程,多线程和线程同步的知识
            本项目主要完成多线程并发聊天室的基础功能,即多个客户端之间通过服务器可以实现群发消息,重点在于学习网络编程,多线程和线程同步的基础知识(基于Linux)。    下面我会详解每一部分的代码。1.主线程        1.1首先由于是自己在电脑里面测试,......
  • Unity学习笔记 6.2D换帧动画
    下载源码UnityPackage目录1.导入图片1.1.图片的叠放顺序2.图片切片3.用动画控制器让马......
  • 7.数据同步&ES集群
    Elasticsearch 和MySQL 同步的策略有哪些?我们可以将同步类型分为全量同步和增量同步。全量同步即建好Elasticsearch 索引后一次性导入MySQL 所有数据。全量同步有很多现成的工具可以用比如go-mysql-elasticsearch、Datax。go-mysql-elasticsearch 是一项将MySQL ......
  • MYSQL 同步到ES 如何设计架构保持一致性
    简单使用某个组件很容易,但是一旦要搬到生产上就要考虑各种各样的异常,保证你方案的可靠性,可恢复性就是我们需要思考的问题。今天来聊聊我们部门在MYSQL同步到ES的方案设计。在面对复杂条件查询时,MYSQL往往显得力不从心,一般公司的做法会通过将mysql中的数据同步到ES,之后的查询......
  • 操作系统综合题之“用记录型信号量机制的wait和signal操作来解决了由北向南和由南向北
    1.问题:假设系统有三个并发进程read、move和print共享缓冲区B1和B2。进程read负责从输入设备上读取信息,每读取一条记录后把它存如缓冲区B1中;进程move负责从缓冲区B1中取出一条记录,整理后放入缓冲区B2;进程print负责将缓冲区B2中的记录取出并打印输出。缓冲区B1和B2每次只能存放1个......