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 │ ├──…...
IDEA运行Tomcat出现乱码问题解决汇总
最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…...
在软件开发中正确使用MySQL日期时间类型的深度解析
在日常软件开发场景中,时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志,到供应链系统的物流节点时间戳,时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库,其日期时间类型的…...
深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录
ASP.NET Core 是一个跨平台的开源框架,用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录,以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...
HTML 语义化
目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案: 语义化标签: <header>:页头<nav>:导航<main>:主要内容<article>&#x…...
学校招生小程序源码介绍
基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码,专为学校招生场景量身打造,功能实用且操作便捷。 从技术架构来看,ThinkPHP提供稳定可靠的后台服务,FastAdmin加速开发流程,UniApp则保障小程序在多端有良好的兼…...
Neo4j 集群管理:原理、技术与最佳实践深度解析
Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...
ABAP设计模式之---“简单设计原则(Simple Design)”
“Simple Design”(简单设计)是软件开发中的一个重要理念,倡导以最简单的方式实现软件功能,以确保代码清晰易懂、易维护,并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计,遵循“让事情保…...
CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)
漏洞概览 漏洞名称:Apache Flink REST API 任意文件读取漏洞CVE编号:CVE-2020-17519CVSS评分:7.5影响版本:Apache Flink 1.11.0、1.11.1、1.11.2修复版本:≥ 1.11.3 或 ≥ 1.12.0漏洞类型:路径遍历&#x…...
Chrome 浏览器前端与客户端双向通信实战
Chrome 前端(即页面 JS / Web UI)与客户端(C 后端)的交互机制,是 Chromium 架构中非常核心的一环。下面我将按常见场景,从通道、流程、技术栈几个角度做一套完整的分析,特别适合你这种在分析和改…...
Elastic 获得 AWS 教育 ISV 合作伙伴资质,进一步增强教育解决方案产品组合
作者:来自 Elastic Udayasimha Theepireddy (Uday), Brian Bergholm, Marianna Jonsdottir 通过搜索 AI 和云创新推动教育领域的数字化转型。 我们非常高兴地宣布,Elastic 已获得 AWS 教育 ISV 合作伙伴资质。这一重要认证表明,Elastic 作为 …...
