当前位置: 首页 > news >正文

Unity使用Mirror制作局域网的同步

1.脚本布置.参考tank那个demo制作

1.新建空物体,为管理脚本的物体:manager,挂载NetworkManager,kcpTransport,NetworkManagerHud.
2.设置玩家出生点,spawnPoint,设置好初始化的position的位置(*),挂载NetworkStartPosition的脚本
3.新建Player的预制体,挂载NetworkIdentity,NetworkTransform(unreliable)的脚本,还有自己的自定义脚本,注意自定义脚本需要继承NetworkBehaviour,这个在编辑的时候需要改改.下面是主玩家的移动代码MainPlayerControll.cs.
4.新建turret的预制体,挂载rigibody, NetworkIdentity, TurretMove,“rigibody需要关闭重力”.

using Mirror;
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using System.Globalization;public class MainPlayerControll : NetworkBehaviour
{public float speed = 5;public float Rspeed = 25;public GameObject turretPrefab;public Transform firepoint;[SyncVar] public int health = 10;int lastHealth = 0;public TextMesh nameTxt;public override void OnStartLocalPlayer(){base.OnStartLocalPlayer();Camera.main.transform.SetParent(transform);Camera.main.transform.localPosition = new Vector3(0, 0.5f, 0);Camera.main.transform.localRotation = Quaternion.identity;}public override void OnStopLocalPlayer(){base.OnStopLocalPlayer();Camera.main.transform.SetParent(null);}void Update(){if (health != lastHealth){nameTxt.text = $"{gameObject.name} <color=red>{health}</color>";lastHealth = health;}if (!isLocalPlayer) return;float horizontalInput = Input.GetAxis("Horizontal");float verticalInput = Input.GetAxis("Vertical");Vector3 movement = transform.forward * verticalInput * speed * Time.deltaTime;Vector3 rotation = new Vector3(0f, horizontalInput * Rspeed * Time.deltaTime, 0f);transform.Translate(movement, Space.World);transform.Rotate(rotation);if (Input.GetKeyDown(KeyCode.Space)){CmdFire();}}[Command]void CmdFire(){GameObject projectile = Instantiate(turretPrefab, firepoint.position, firepoint.rotation);NetworkServer.Spawn(projectile);}[ServerCallback]void OnTriggerEnter(Collider other){if (other.GetComponent<TurretMove>() != null){--health;if (health == 0)NetworkServer.Destroy(gameObject);}}
}
using Mirror;
using UnityEngine;
using System.Collections;
using System.Collections.Generic;public class TurretMove : NetworkBehaviour
{public float destroyAfter = 2;public Rigidbody rigidBody;public float force = 1000;public override void OnStartServer(){Invoke(nameof(DestroySelf), destroyAfter);}void Start(){rigidBody.AddForce(transform.forward * force);}// destroy for everyone on the server[Server]void DestroySelf(){NetworkServer.Destroy(gameObject);}[ServerCallback]void OnTriggerEnter(Collider co) => DestroySelf();
}

2.注意:在manager的NetworkManager中,需要给PlayerPrefab赋值,拖入制作的player预制体,transport中拖入同物体的kcpTransport组件.playerspawnMethod选择RoundRobin.
player预制体的MainPlayerControll脚本需要拖入子弹的预制体,还要拖入一个开火点,开火点:就是创建一个空物体放在player上作为开火点.
子弹只需要把自己的的rigibody拖进去到TurretMode.cs脚本里

主玩家脚本里的广播的字段 需要这样声明写 [SyncVar] public int health = 10;

一些被动碰撞,触发的方法也要加上 [ServerCallback]

  [ServerCallback]void OnTriggerEnter(Collider other){if (other.GetComponent<TurretMove>() != null){--health;if (health == 0)NetworkServer.Destroy(gameObject);}}

主动触发 如开火:需要加 [Command]

    [Command]void CmdFire(){GameObject projectile = Instantiate(turretPrefab, firepoint.position, firepoint.rotation);NetworkServer.Spawn(projectile);}

总结:

[Command]:用于在客户端调用服务器上的方法。客户端可以使用该标记调用服务器上的方法,并将其作为命令进行处理。方法名称必须以 “Cmd” 开头。
[ClientRpc]:用于在服务器上调用并在所有连接的客户端上执行的方法。服务器可以使用该标记调用方法,并在所有连接的客户端上执行。方法名称可以任意命名。
[TargetRpc]:用于在服务器上调用并在特定客户端上执行的方法。服务器可以使用该标记调用方法,并在特定的客户端上执行。方法名称可以任意命名。
[ServerCallback]:用于指示方法只在服务器上执行,不在客户端上执行。该标记用于在服务器上定义特定逻辑或处理服务器端的事件。方法名称可以任意命名。

注意事项:

[Command]、[ClientRpc] 和 [TargetRpc] 方法必须在继承自 NetworkBehaviour 的脚本中使用,并且需要正确配置网络连接和同步设置。
[Command] 方法只能从客户端调用,并且只在服务器上执行。
[ClientRpc] 方法只能在服务器上调用,并在所有连接的客户端上执行。
[TargetRpc] 方法只能在服务器上调用,并且只在特定的客户端上执行。
[ServerCallback] 方法只在服务器上执行,不在客户端上执行。

方法开头规则:

[Command] 标记的方法名称必须以 “Cmd” 开头。
[ClientRpc]、[TargetRpc] 和 [ServerCallback] 标记的方法名称可以任意命名。

相关文章:

Unity使用Mirror制作局域网的同步

1.脚本布置.参考tank那个demo制作 1.新建空物体,为管理脚本的物体:manager,挂载NetworkManager,kcpTransport,NetworkManagerHud. 2.设置玩家出生点,spawnPoint,设置好初始化的position的位置(*),挂载NetworkStartPosition的脚本 3.新建Player的预制体,挂载NetworkIdentity,Ne…...

算法 N皇后问题-(递归回溯)

牛客网 BM59. 解题思路&#xff1a; 行列、斜叉不在一条直线上。 命令行为 row, 列为col, row 从0开始递归直到最后一行&#xff0c;列从0开始遍历&#xff0c;直到最后一列&#xff0c;中间每一步记录或清除位置状态&#xff0c;状态分为 m1[col] 1, m2[row-col] 1, m3[r…...

个人博客搭建记录

个人博客地址&#xff1a;www.jiasun.top 使用github pagehexo搭建&#xff0c;主题为fluid&#xff0c;搭建步骤参照&#xff1a;Github hexo 实现自己的个人博客、配置主题&#xff08;超详细&#xff09; 主题&#xff1a;https://hexo.fluid-dev.com/ 搭建时的问题&…...

下载vscode 更新

将下载地址的主地址加入一下镜像网址 http://vscode.cdn.azure.cn下面是访问页面 http://vscode.cdn.azure.cn/stable/abd2f3db4bdb28f9e95536dfa84d8479f1eb312d/VSCodeUserSetup-x64-1.82.2.exe...

std::async简单使用

std::async介绍并使用 std::async是C11引入的一个用于异步执行函数或函数对象的工具。它可以用于并行地执行函数&#xff0c;并在需要时获取函数的返回值。下面是一个简单的示例&#xff0c;演示了如何使用std::async&#xff1a; #include <iostream> #include <fu…...

【编程实践】在VS studio中配置Eigen库

1 介绍 Eigen库是C标准模板库&#xff0c;能够进行向量运算、矩阵运算、矢量运算、数值分析等操作&#xff0c;并且包含相应的运算算法。 Eigen官方地址: 地址 可在官网下载指定版本的压缩包&#xff0c;将压缩包解压至后面配置的“附件包含目录”中。 2 配置 2.1 VS studi…...

SQLite 3.43 发布,性能大提升!

前言 SQLite是一种被广泛运用的嵌入式关系型数据库管理系统&#xff0c;最新发布的SQLite 3.43版本带来了一个重要的改进&#xff0c;大幅提升了对JSON数据的处理性能&#xff0c;达到了之前的两倍。 主要更新 添加对 Contentless-Delete FTS5 索引的支持。这是 FTS5 全文搜索…...

数据中心液冷服务器详情说明

目录 前言 何为液冷服务器&#xff1f; 为什么需要液冷&#xff1f; 1.数据中心降低PUE的需求 2.政策导向 3.芯片热功率已经达到风冷散热极限 4.液冷比热远大于空气 液冷VS风冷&#xff0c;区别在哪&#xff1f; 1.液冷服务器跟风冷服务器的区别 2.液冷数据中心跟风冷…...

Openresty(二十二)ngx.balance和balance_by_lua终结篇

一 灰度发布铺垫 ① init_by_lua* init_by_lua init_by_lua_block 特点: 在openresty start、reload、restart时执行,属于master init 阶段机制&#xff1a; nginx master 主进程加载配置文件时&#xff0c;运行全局Lua VM级别上的参数指定的Lua代码场景&#xff1a; …...

Docker注入环境变量且设置多个环境变量

方式一 运行docker命令修改 在运行docker时&#xff0c;直接使用-e或–env&#xff0c;输入需要改变的变量 例如&#xff1a;springboot配置文件如下,可注入环境变量启动端口SERVER_PORT&#xff0c;以及启动配置文件NODE_ENV:dev server:port: ${SERVER_PORT:8400} spring…...

代码随想录二刷Day 15

102. Binary Tree Level Order Traversal vector<int>() it is basically constructor of std::vector class and will create a new empty vector. You can also mention the size of required vector in brackets. 访问二维vector的元素: 如果指定外层和内层向量的大…...

Node.js环境安装与服务设置,结合内网穿透随时随地公网访问!

文章目录 前言1.安装Node.js环境2.创建node.js服务3. 访问node.js 服务4.内网穿透4.1 安装配置cpolar内网穿透4.2 创建隧道映射本地端口 5.固定公网地址 前言 Node.js 是能够在服务器端运行 JavaScript 的开放源代码、跨平台运行环境。Node.js 由 OpenJS Foundation&#xff0…...

八、数据类型转换

数据类型转换 1.数据类型转换1.1.隐式类型转换1.2.显式类型转换1.3.训练11.4.训练2 —————————————————————————————————————————————————— 1.数据类型转换 类型转换是将一个值从一种类型更改为另一种类型的过程。例如&…...

2023数学建模研赛华为杯E题思路-出血性脑卒中临床智能诊疗建模

E 题 出血性脑卒中临床智能诊疗建模 三、请建模回答如下问题 1血肿扩张风险相关因素探索建模。 a)请根据“表1”&#xff08;字段&#xff1a;入院首次影像检查流水号&#xff0c;发病到首次影像检查时间间隔&#xff09;&#xff0c;“表2”&#xff08;字段&#xff1a;各时…...

Windows Server 2012 R2系统远程桌面的数字证书算法SHA1升级到SHA256

问题描述&#xff1a; 最近项目进行密评的时候&#xff0c;Windows Server 2012 R2发现了以下证书问题&#xff1a; Windows Server 2012 R2系统远程桌面的TLS 1.2协议使用SHA1算法数字证书&#xff0c;且证书有效日期截止23年10月&#xff0c;建议注意证书到期时间&#xff…...

windows进程管理相关命令

windows进程管理相关命令 根据进程名找到进程 例如python进程 PS C:\Users\27467> tasklist | findstr python python.exe 7088 Console 2 3,364 K python.exe 1580 Console 2 41,…...

Flutter快速入门学习(一)

目录 前言 新建项目 项目入口 Dart的入口&#xff08;项目的入口&#xff09; 布局 视图组件 Container&#xff08;容器&#xff09; Text&#xff08;文本&#xff09; Image&#xff08;图片&#xff09; Row&#xff08;水平布局&#xff09;和Column&#xff08…...

网站排名下降的原因和解决方法(SEO优化失误可能导致网站排名下降)

SEO优化是网站推广的重要环节&#xff0c;它可以提升网站的访问量和排名。但是&#xff0c;SEO优化不当也可能会导致网站排名下降。本文将分析SEO优化失误可能导致网站排名下降的原因&#xff0c;并提供相应的解决方法。 一&#xff1a;标题——SEO优化过度 SEO优化的目的是为…...

爱看小说手机网源码全站带数据带自动采集程序/ThinkPHP内核小说网站源码+书库数据库带自动采集

爱看小说手机网源码全站带数据带自动采集程序&#xff0c;爱看小说程序源码2W条数据全站打包,自动采集程序网站源码,后台已经更新5个采集规则可以采集小说30万本大概约10G。 分享的这一款自带2w数据爱看小说网源码全站带数据打包,ThinkPHP内核小说网站源码带听书等全部插件&am…...

《Java8实战》

《Java实战》学习整理 文章目录 一、Lambda1.1 基础概念1.1.1 [Lambda表达式](https://baike.baidu.com/item/Lambda表达式/4585794?fromModulelemma_inlink)定义 1.2 引入Lambda1.3 Lambda1.3.1 函数式接口1.3.2 Lambda表达式&#xff1a;(参数) -> 表达式1.3.3 在哪里使…...

【初阶数据结构】——堆排序和TopK问题

个人主页 代码仓库 C语言专栏 初阶数据结构专栏 Linux专栏 接上篇二叉树和堆的引入 目录 前言 建堆 插入数据向上调整算法建堆 移动数据向上调整算法建堆 无序数组从H-1层向上移动的向下调整算法建堆 堆排序 TOP-K问题 前言 上篇文章详细讲解了堆&#xff0c;…...

LLM - 大模型速递 InternLM-20B 快速入门

目录 一.引言 二.模型简介 1.模型特性 2.模型评测 三.模型尝试 1.模型参数 2.generate 与 chat 3.模型微调 四.总结 一.引言 一早醒来国产开源大模型又添一员猛将&#xff0c;书生-浦语大模型 InternLM-20B 大模型发布并开源&#xff0c;这里字面翻译是实习生大模型&…...

探索AIGC人工智能(Midjourney篇)(四)

文章目录 Midjourney模特换装 Midjourney制作APP图标 Midjourney网页设计 Midjourney如何生成IP盲盒 Midjourney设计儿童节海报 Midjourney制作商用矢量插画 Midjourney设计徽章 Midjourney图片融合 Midjourney后缀参数 Midjourney模特换装 关键词生成模特照片 中国女性模特的…...

uni-app:跨页面传递数组

A页面&#xff1a; JSON.stringify() 是一个 JavaScript 内置的方法&#xff0c;用于将 JavaScript 对象或值转换为 JSON 字符串。 //查看详细信息 details(e){// console.log(e.currentTarget.dataset.id)var device JSON.stringify(e.currentTarget.dataset.id)uni.naviga…...

element 表格拖拽保存插件

这是以前看着一篇文章 1.下载包 npm install sortablejs --save 2.在页面中引入&#xff0c;或者全局引入 import Sortable from ‘sortablejs’ 3.在template中 <div id"second"><el-tableclass"threeTable":style"{height:tableData.len…...

通过内网穿透,在Windows 10系统下搭建个人《我的世界》服务器公网联机

文章目录 1. Java环境搭建2.安装我的世界Minecraft服务3. 启动我的世界服务4.局域网测试连接我的世界服务器5. 安装cpolar内网穿透6. 创建隧道映射内网端口7. 测试公网远程联机8. 配置固定TCP端口地址8.1 保留一个固定tcp地址8.2 配置固定tcp地址 9. 使用固定公网地址远程联机 …...

C++11异步任务轮子实现(header-only)

为什么写这个 C17异步任务需要future和promise配合使用&#xff0c;不是很喜欢那种语法。实现一个操作简洁的异步任务。 满足功能 异步任务超时控制get接口同步任务计时lambda回调任务重启 使用 #include "async_callback.h" #include <unistd.h> #includ…...

2023华为杯研究生数学建模竞赛选题建议+初步分析

如下为C君的2023华为杯研究生数学建模竞赛&#xff08;研赛&#xff09;选题建议初步分析 2023华为杯研究生数学建模竞赛&#xff08;研赛&#xff09;选题建议 提示&#xff1a;DS C君认为的难度&#xff1a;CE<D<F&#xff0c;开放度&#xff1a;CDE<F。 华为专项…...

多线程并发或线程安全问题如何解决

1、通过volatile关键字修饰变量&#xff0c;可以实现线程之间的可见性&#xff0c;避免变量脏读的出现&#xff0c;底层是通过限制jvm指令的重新排序实现的&#xff0c;适用于一个线程修改&#xff0c;多个线程读的场景。 2、通过synchronized锁&#xff08;任意对象&#xff0…...

深度学习——线性神经网络一

深度学习——线性神经网络一 文章目录 前言一、线性回归1.1. 线性回归的基本元素1.1.1. 线性模型1.1.2. 损失函数1.1.3. 解析解1.1.4. 随机梯度下降1.1.5. 用模型进行预测 1.2. 向量化加速1.3. 正态分布与平方损失1.4. 从线性回归到深度网络 二、线性回归的从零开始实现2.1. 生…...

wordpress 网店 主题/打开百度网页版

打比方一个类里边有多个内部类&#xff0c;怎样获取该类里边指定的某一个内部类public class FactoryTest {Testpublic void test2(){FactoryTest factoryTest new FactoryTest();Class extends FactoryTest> clazz factoryTest.getClass();Class>[] classes clazz.ge…...

网站设计网络推广关键词/推广软件有哪些

一年有过去了&#xff0c; 很长时间也没有写什么文章了&#xff0c;准确的说是2个月&#xff0c;没写正经的东西了。主要是最近生活很忙碌&#xff0c;工作也很忙碌。在说&#xff0c;怎么说的那&#xff0c;你不工作&#xff0c;就没Money花&#xff0c;嗨&#xff0c;生活就是…...

关于电商网站规划方案/广东深圳疫情最新

SOA 的思想或者理念在国内已经是一个老课题&#xff0c;随着规模的扩大和国际化竞争的加剧&#xff0c;企业内部各部门之间信息孤岛、无法协同办公的现状已经制约公司效率的提升&#xff0c;制 约公司的创新与发展&#xff0c;因此在企业客户中就产生了一种强烈需求&#xff0c…...

品牌建站/sem竞价是什么

https://ww2.mathworks.cn/help/matlab/ref/colon.html (帮助中心) 3. 向量和矩阵 创建包含多个元素的 MATLAB 变量。 手动输入数组 任务 1 创建一个名为 x 并且值为 4 的变量。 >> x=4 任务 2 创建一个名为 x 的数组,其中两个元素位于同一行中:7 和 9 >> x=…...

做推广能提高网站权重么/深圳seo优化

在上一篇文章里面我们编译了在X86体系的最简单的Linux下的入门驱动Hello&#xff0c;现在我们开始开发在ARM板上的最简单的Hello的驱动&#xff1a; 开发环境&#xff1a;虚拟机上的Linux(Fedora)ARM(11)友善之臂的光盘带的linux内核linux-2.6.36 开发步骤&#xff1a; 1.先安装…...

推荐的网站/百度浏览器网站入口

向大家推荐一个UML工具&#xff0c;这个工具的名字叫Visual Paradigm for UML&#xff0c;是一个获得过Jolt大奖&#xff08;软件行业的奥斯卡!&#xff09;的工具。这个工具提供Community Edition, 这一版本可以免费使用一个月。其下载地址是http://www.visual-paradigm.com/p…...