Unity之NetCode多人网络游戏联机对战教程(9)--NetworkAnimator组件
文章目录
- 前言
- NetworkAnimator
- Animator的Trigger属性
- 服务器权威模式(Server Authoritative Mode)
- 客户端权威模式 (Owner Authoritative Mode)
- 学习文档
前言
这个组件是NetCode常用的组件之一,NetworkAnimator跟NetworkTransform一样,用来同步信息,NetworkAnimator是用来同步动画的。
NetworkAnimator
NetworkAnimator组件为提供了如何在网络会话期间同步动画的基本示例。动画状态与加入现有网络会话的玩家同步,并与在动画状态更改之前已连接的任何客户端同步。
加入现有网络会话的玩家将与以下内容同步:
- 所有Animator的当前属性和状态。
- 除了Animator
trigger属性。这些仅与已连接的客户端同步。
- 除了Animator
- 任何正在进行的过渡
- 已连接的玩家将与Animator的更改同步:
- 状态
- 过渡
- 属性
- NetworkAnimator仅同步自上一帧以来发生更改的属性值。
- 由于
trigger类似于event,当将Animator属性设置为true时,它将始终同步。
NetworkAnimator可以以两种权威模式运行:
- 服务器权威(默认):服务器启动动画状态更改。
- 拥有者仍然可以调用
NetworkAnimator.SetTrigge。
- 拥有者仍然可以调用
- 客户端权威:客户端所有者启动动画状态更改。
Animator的Trigger属性
Animator的Trigger属性类型基本上不过是一个布尔值,当设置为true时,在Animator组件处理完触发器后将自动重置为false。通常,触发器用于启动Animator层状态之间的过渡。从这个意义上说,可以将Trigger看作是信号"事件的开始"的一种方式。由于Trigger属性具有这种独特的行为,因此要通过NetworkAnimator.SetTrigger方法设置触发器值。
注意: 如果使用
Animator.SetTrigger设置Trigger属性,那么这不会与非所有者客户端同步。
服务器权威模式(Server Authoritative Mode)
NetworkAnimator的默认设置是服务器权威模式(Server Authoritative Mode)。在服务器权威模式下,任何在服务器端设置(触发器)或检测到的(层、状态或任何Animator属性的更改,不包括触发器)的动画状态更改都将与所有客户端同步。由于服务器发起对Animator状态更改的任何同步,与NetworkAnimator相关联的NetworkObject的所有者客户端可能会滞后大约完整的往返时间(RTT)。下面是一个时序图来展示这一点:

在上面的图表中,客户端可能会向服务器发送一个RPC,告诉服务器玩家正在执行某种可能改变玩家动画的操作(包括设置触发器)。在这种情况下,客户端向服务器发送一个RPC(一半RTT),服务器处理RPC,NetworkAnimator(服务器端)检测到相关的Animator状态更改,然后所有客户端(包括所有者客户端)都与更改同步。
- 服务器权威模型的优势:
- 如果运行一个普通的服务器(非主机),这个模型有助于减少所有客户端动画之间的同步延迟。
- 服务器权威模型的缺点:
- 主机将始终“稍微领先”于所有其他客户端,这可能对您的项目是一个问题或不是一个问题。
- 客户端所有者在执行动作(移动、拾取物品、导致Animator状态更改的任何操作)时会经历延迟。
客户端权威模式 (Owner Authoritative Mode)
通常,项目设计(或个人偏好)可能要求所有者立即更新到任何Animator状态更改。最典型的原因是为本地玩家提供即时的视觉(动画)反馈。要创建一个以所有者为权威的NetworkAnimator,您需要创建一个从NetworkAnimator派生的新类,重写NetworkAnimator.OnIsServerAuthoritative方法,并在覆盖的OnIsServerAuthoritative方法中返回false,就像下面提供的示例一样:
using UnityEngine;
using Unity.Netcode.Components;public class OwnerNetworkAnimator : NetworkAnimator
{protected override bool OnIsServerAuthoritative(){return false;}
}
这个写法就是跟之前的
ClientNetworkTransform是一样的。
观察所有者为权威的NetworkAnimator的时序,在下面的图表中,您可以看到尽管所有者客户端获得了“即时的视觉动画响应”,但非所有者客户端最终落后于所有者客户端大约一个完整的往返时间(RTT),而主机将落后于所有者客户端的一半RTT。

在上面的图表中,显示了所有者客户端有一个Animator状态更改,被NetworkAnimator(OwnerNetworkAnimator)检测到,它自动将服务器与更改的状态同步。服务器在本地应用了这些更改,然后将此状态更改广播给所有非所有者客户端。
- Owner authoritative mode优点:
- 所有者能够即时获得Animator状态更改的视觉反馈,为本地玩家提供更流畅的体验。
- Owner authoritative mode缺点:
- 非所有者客户端的动画大约滞后于所有者客户端一个完整的往返时间(RTT)。
- 主机的动画大约滞后于所有者客户端的动画半个往返时间(RTT)。
学习文档
https://docs-multiplayer.unity3d.com/netcode/current/components/networkanimator/
相关文章:
Unity之NetCode多人网络游戏联机对战教程(9)--NetworkAnimator组件
文章目录 前言NetworkAnimatorAnimator的Trigger属性服务器权威模式(Server Authoritative Mode)客户端权威模式 (Owner Authoritative Mode)学习文档 前言 这个组件是NetCode常用的组件之一,NetworkAnimator跟NetworkTransform一样…...
iceoryx之Roudi
目录...
.Net(C#)常用转换byte转uint32、byte转float等
1、byte转String Encoding.ASCII.GetString(byte[]); 2、base64string转byte byte[]Base64Decoder.Decoder.GetDecoded(string); 3、byte转UInt16 方法一 (UInt16)(bytes[0] * 256 bytes[1]) 方法二 (UInt16)((bytes[0] << 8) | bytes[1]); 方法三 字节序要对…...
windows快捷方式图标变成空白
今天突然有客户说应用程序快捷方式图标变成了空白,就研究了一下,网上找了一下很多都说是什么图标缓存有问题,试过之后发现并不能解决问题。 然后发现用户的文件上都一把黄色的小锁的标志,查了一下说是文件属性里面设置加密之后就会…...
【Linux系统编程十九】:(进程通信)--匿名管道/模拟实现进程池
【Linux系统编程十九】:匿名管道原理/模拟实现进程池 一.进程通信理解二.通信实现原理三.系统接口四.五大特性与四种情况五.应用场景--进程池 一.进程通信理解 什么是通信? 通信其实就是一个进程想把数据给另一个进程,但因为进程具有独立性…...
【全网首发】2023年NOIP真题
目录 前言 真题 结尾 前言 NOIP题目了解一下,后续有可能会出讲解,题目全部来自于洛谷 真题 第一题:词典 第二题:三值逻辑 第三题:双序列扩展 第四题: 天天爱打卡 结尾 大家可以把你的预期分数打在评论…...
【Linux网络】从原理到实操,感受PXE无人值守自动化高效批量网络安装系统
一、PXE网络批量装机的介绍 1、常见的三种系统安装方式 2、回顾系统安装的过程,了解系统安装的必要条件 3、什么是pxe 4、搭建pxe的原理 5、Linux的光盘镜像中的isolinux中的相关文件学习 二、关于实现PXE无人值守装机的四大文件与五个软件的对应关系详解 5个…...
Pandas+Matplotlib 数据分析
利用可视化探索图表 一、数据可视化与探索图 数据可视化是指用图形或表格的方式来呈现数据。图表能够清楚地呈现数据性质, 以及数据间或属性间的关系,可以轻易地让人看图释义。用户通过探索图(Exploratory Graph)可以了解数据的…...
k8s ingress高级用法一
前面的文章中,我们讲述了ingress的基础应用,接下来继续讲解ingress的一些高级用法 一、ingress限流 在实际的生产环境中,有时间我们需要对服务进行限流,避免单位时间内访问次数过多,常用的一些限流的参数如下&#x…...
C语言--从键盘输入10个数字放在数组中,并输出
用scanf读取数字的时候要注意,可以输入一个数字,按一下回车,输入一个数字,按一下回车,也可以一次性输入完10个数据。(中间可以用空格隔开,系统会自动识别) 输出一:每按下一个数字&am…...
SSL加密
小王学习录 今日摘录前言HTTP + SSL = HTTPSSSL加密1. 对称加密2. 非对称加密 + 对称加密3. 证书今日摘录 但愿四海无尘沙,有人卖酒仍卖花。 前言 SSL表示安全套接层,是一个用于保护计算机网络中数据传输安全的协议。SSL通过加密来防止第三方恶意截取并篡改数据。在实际应用…...
一个美观且功能丰富的 .NET 控制台应用程序开源库
推荐一个美观且功能丰富的 .NET 控制台应用程序开源库,从此告别黑漆漆的界面。 01 项目简介 Spectre.Console 是一个开源的 .NET 库,用于创建美观、功能丰富的控制台(命令行)应用程序。它提供了一组易于使用的 API,…...
DispatcherSynchronizationContext and Dispatcher
https://www.cnblogs.com/liangouyang/archive/2008/11/20/1337907.html SynchronizationContext提供一个自由线程的同步上下文,一个常用的用法是把UI线程的同步上下文保存起来,传给另一个线程,因为UI只能再UI线程中操作,在另外一…...
java类型属性set方法无法被赋值
前言 遇到一个基础的问题 方法设置属性值 失败 问题代码 有个内部类的User对象 分别使用 方式一和 方式二 设置User的属性值 发现方式一的属性并不能被设置成功 可以自行测试下 public class Test{public static void main(String[] args) {#方式一 User user new User();u…...
【2】SM2验签工具和RSA验签工具
0X01 前言 最近看了好多验签工具,感觉不是很好用,就自己造了个。 0x02 工具功能介绍 对SM2算法进行验签和RSA算分进行验签,签名值可以是base64,也可以是十六进制。 兼容各种输入。 0x03 工具使用 RSA 验签 SM2 验签 0x04 工具…...
Python (十一) 迭代器与生成器
迭代器 迭代器是访问集合元素的一种方式,可以记住遍历的位置的对象 迭代器有两个基本的方法:iter() 和 next() 字符串,列表或元组对象都可用于创建迭代器 字符串迭代 str1 Python str_iter iter(str1) print(next(str_iter)) print(next(st…...
通过maven命令手动上传jar私服Nexus
Nexus3在界面上传组件时报: Ext.JSON.decode(): Youre trying to decode an invalid JSON String: 查找了很多资料,都没有解决。有哪位大佬知道的评论告诉一下,万分感谢。 于是换成maven命令上传: mvn deploy:deploy-file -Dgr…...
记一次用jlink调试正常,不进入调试就不能运行的情况
一、概述 我开机会闪烁所有指示灯,但是重新上电时,指示灯并没有闪烁,就像"卡死"了一样。 使用jlink的swd接口进行调试,需要多点几次运行才能跳转到main函数里面。 调试模式第一次点击运行,暂停查看函数堆栈…...
搞科研、写论文,如何正确使用GPT?AIGC技术解析、提示词工程高级技巧、AI绘图、ChatGPT/GPT4应用
目录 专题一 OpenAI开发者大会最新技术发展及最新功能应用 专题二 AIGC技术解析 专题三 提示词工程高级技巧 专题四 ChatGPT/GPT4的实用案例 专题五 让ChatGPT/GPT4成为你的论文助手 专题六 让ChatGPT/GPT4成为你的编程助手 专题七 让ChatGPT/GPT4进行数据处理 专题八 …...
Java实现的插件化策略模式
Java实现的插件化策略模式 目录结构实现BaseDealAnno.java(注解)BasePluginEnum.java(枚举)BaseDealFactory.javaContextBaseDealListener.java(核心类)BaseDealHandler.java(接口)BaseAudioService.java(可扩展多个)验证目录结构 com.demo.mytest ├── strategy │ ├──…...
RestClient
什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端,它允许HTTP与Elasticsearch 集群通信,而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级ÿ…...
【kafka】Golang实现分布式Masscan任务调度系统
要求: 输出两个程序,一个命令行程序(命令行参数用flag)和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽,然后将消息推送到kafka里面。 服务端程序: 从kafka消费者接收…...
树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法
树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作,无需更改相机配置。但是,一…...
FFmpeg 低延迟同屏方案
引言 在实时互动需求激增的当下,无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作,还是游戏直播的画面实时传输,低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架,凭借其灵活的编解码、数据…...
《Playwright:微软的自动化测试工具详解》
Playwright 简介:声明内容来自网络,将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具,支持 Chrome、Firefox、Safari 等主流浏览器,提供多语言 API(Python、JavaScript、Java、.NET)。它的特点包括&a…...
可靠性+灵活性:电力载波技术在楼宇自控中的核心价值
可靠性灵活性:电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中,电力载波技术(PLC)凭借其独特的优势,正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据,无需额外布…...
linux arm系统烧录
1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 (忘了有没有这步了 估计有) 刷机程序 和 镜像 就不提供了。要刷的时…...
cf2117E
原题链接:https://codeforces.com/contest/2117/problem/E 题目背景: 给定两个数组a,b,可以执行多次以下操作:选择 i (1 < i < n - 1),并设置 或,也可以在执行上述操作前执行一次删除任意 和 。求…...
如何为服务器生成TLS证书
TLS(Transport Layer Security)证书是确保网络通信安全的重要手段,它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书,可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...
Mobile ALOHA全身模仿学习
一、题目 Mobile ALOHA:通过低成本全身远程操作学习双手移动操作 传统模仿学习(Imitation Learning)缺点:聚焦与桌面操作,缺乏通用任务所需的移动性和灵活性 本论文优点:(1)在ALOHA…...
