Unity之NetCode多人网络游戏联机对战教程(9)--NetworkAnimator组件

news2024/11/14 23:29:57

文章目录

    • 前言
    • NetworkAnimator
    • Animator的Trigger属性
    • 服务器权威模式(Server Authoritative Mode)
    • 客户端权威模式 (Owner Authoritative Mode)
    • 学习文档

前言

这个组件是NetCode常用的组件之一,NetworkAnimatorNetworkTransform一样,用来同步信息,NetworkAnimator是用来同步动画的。


NetworkAnimator

NetworkAnimator组件为提供了如何在网络会话期间同步动画的基本示例。动画状态与加入现有网络会话的玩家同步,并与在动画状态更改之前已连接的任何客户端同步。

加入现有网络会话的玩家将与以下内容同步:

  • 所有Animator的当前属性状态
    • 除了Animatortrigger属性。这些仅与已连接的客户端同步。
  • 任何正在进行的过渡
  • 已连接的玩家将与Animator的更改同步:
    • 状态
    • 过渡
    • 属性
      • NetworkAnimator仅同步自上一帧以来发生更改的属性值。
      • 由于trigger类似于event,当将Animator属性设置为true时,它将始终同步。

NetworkAnimator可以以两种权威模式运行:

  • 服务器权威(默认):服务器启动动画状态更改。
    • 拥有者仍然可以调用NetworkAnimator.SetTrigge
  • 客户端权威:客户端所有者启动动画状态更改。

Animator的Trigger属性

AnimatorTrigger属性类型基本上不过是一个布尔值,当设置为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/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1223409.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

VSG-001

VulkanSceneGraph (VSG), is a modern, cross platform, high performance scene graph library built upon Vulkan VSG 是一个基于vulkan的现代的、跨平台的高性能场景管理库 VSg特性: 使用C17作为c规范编码,支持 CppCoreGuidelines支持 FOSS Best P…

Google Chrome 任意文件读取 (CVE-2023-4357)漏洞复现

Google Chrome 任意文件读取 (CVE-2023-4357)漏洞复现 1.漏洞描述 该漏洞的存在是由于 Google Chrome 中用户提供的 XML 输入验证不足。远程攻击者可以创建特制网页,诱骗受害者访问该网页并获取用户系统上的敏感信息。远程攻击者可利用该漏洞通过构建的 HTML 页面…

Leetcode——最长递增子序列

1. 题目链接:300. 最长递增子序列 2. 题目描述: 给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如&a…

基于秃鹰算法优化概率神经网络PNN的分类预测 - 附代码

基于秃鹰算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于秃鹰算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于秃鹰优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要:针对PNN神经网络的光滑…

Android Fragment 要你何用?2.0版本

作者:小鱼人爱编程 1. 老生常谈:为什么需要Fragment? 先看Activity、Fragment、View三者的关系: Activity 拥有生命周期,但是需要和AMS通信(跨进程),比较臃肿。 View 不需要和AMS通信,但没有生命周期&…

机器学习第9天:决策树分类

文章目录 机器学习专栏 介绍 基本思想 使用代码 深度探索 优点 估计概率 训练算法 CART成本函数 实例数与不纯度 正则化 在鸢尾花数据集上训练决策树 机器学习专栏 机器学习_Nowl的博客-CSDN博客 介绍 作用:分类 原理:构建一个二叉树&#…

Aerial for Mac: 沉浸在高清鸟瞰的世界,让你的屏幕焕发新生

你是否已经厌倦了那些平淡无奇的屏保程序?是否希望你的Mac屏幕能更生动、更有趣?如果你对此抱有强烈的期待,那么Aerial for Mac绝对会是你期待已久的解决方案。 Aerial for Mac是一款独具特色的高清屏保程序,它以鸟瞰的视角带你领…

MyBatis查询数据库(全是精髓)

1. 什么是MyBatis? 简单说,MyBatis就是一个完成程序与数据库交互的工具,也就是更简单的操作和读取数据库的工具。 2. 怎么学习Mybatis Mybatis学习只分为两部分: 配置MyBatis开发环境使用MyBatis模式和语法操作数据库 3. 第一…

【广州华锐互动】VR技术助力中小学生安全教育,让学生在虚拟世界中学会自我保护!

随着科技的不断发展,虚拟现实(VR)技术已经逐渐走进我们的生活。在教育领域,VR技术的应用也日益广泛,为传统的教育模式带来了革命性的变革。中小学生安全教育作为学生生活中的重要组成部分,其重要性不言而喻…

PyTorch 实战之水果分类

当我们试图提高神经网络的准确性时,经常会遇到过拟合训练数据的情况。当我们运行测试数据的模型时,这会导致一个糟糕的预测。因此,我采取了一个数据集,并应用这些技术,不仅提高准确性,而且还处理过拟合的问…

2023-11-17 VsCode使用makefile进行多文件编译

点击 <C 语言编程核心突破> 快速C语言入门 VsCode使用makefile进行多文件编译 前言一、一个简单的多文件示例二、makefile基本语法三、VsCode使用makefile总结 前言 要解决问题: C或C可以多文件编译, 意味着需要进行代码组织, 为了方便多文件编译, gnu开发了make工具, …

【Gradle构件工具深度学习】

Gradle构件工具深度学习 1. 课程大纲1.1 Gradle入门1.2 与Idea整合1.3 Gradle进阶 2. 常见项目构建工具3. 安装gradle 1. 课程大纲 1.1 Gradle入门 基本介绍、常用指令、项目目录、项目应用 1.2 与Idea整合 Groovy语法、整合IDEA、搭建web工程、项目部署 1.3 Gradle进阶 生命周…

Linux 进程管理 实时调度类及SMP和NUMA

文章目录 一、 实时调度类分析1.1 实时调度实体sched_rt_entity数据结构1.2 实时调度类rt_sched_class数据结构1.3 实时调度类功能函数 二、SMP和NUMA2.1 SMP&#xff08;多对称处理器结构&#xff0c;UMA&#xff09;2.2 NUMA&#xff08;非一致内存访问结构&#xff09;2.3 C…

验证码案例 —— Kaptcha 插件介绍 后端生成验证码,前端展示并进行session验证(带完整前后端源码)

&#x1f9f8;欢迎来到dream_ready的博客&#xff0c;&#x1f4dc;相信你对这篇博客也感兴趣o (ˉ▽ˉ&#xff1b;) &#x1f4dc;表白墙/留言墙 —— 中级SpringBoot项目&#xff0c;MyBatis技术栈MySQL数据库开发&#xff0c;练手项目前后端开发(带完整源码) 全方位全步骤手…

4.6 Windows驱动开发:内核遍历进程VAD结构体

在上一篇文章《内核中实现Dump进程转储》中我们实现了ARK工具的转存功能&#xff0c;本篇文章继续以内存为出发点介绍VAD结构&#xff0c;该结构的全程是Virtual Address Descriptor即虚拟地址描述符&#xff0c;VAD是一个AVL自平衡二叉树&#xff0c;树的每一个节点代表一段虚…

计算机网络学习笔记(六):应用层(待更新)

目录​​​​​​​ 6.2 文件传送协议FTP(File Transfer Protocol) 6.2.1 FTP概述 6.2.2 FTP的基本工作原理 6.5 电子邮件&#xff1a;SMTP、POP3、IMAP 6.5.1 电子邮件概述 6.5.2 发邮件&#xff1a;简单邮件传送协议SMTP 6.5.3 电子邮件的信息格式、地址格式 6.5.4 收…

Python语言:随机生成几个数案例分析讲解

背景 在某一节课上&#xff0c;老师使用xx通软件随机生成几个学号&#xff0c;并让对应学号同学回答问题。虽然我对xx通软件没啥好感&#xff0c;不过感觉这个随机生成学号功能挺不错的。今天我用python实现一个这个功能。 其实原理挺简单的&#xff0c;就是就是在一堆数字里随…

vite vue3配置eslint和prettier以及sass

准备 教程 安装eslint 官网 vue-eslint ts-eslint 安装eslint yarn add eslint -D生成配置文件 npx eslint --init安装其他插件 yarn add -D eslint-plugin-import eslint-plugin-vue eslint-plugin-node eslint-plugin-prettier eslint-config-prettier eslint-plugin…

搞科研、写论文,如何正确使用GPT?AIGC技术解析、提示词工程高级技巧、AI绘图、ChatGPT/GPT4应用

目录 专题一 OpenAI开发者大会最新技术发展及最新功能应用 专题二 AIGC技术解析 专题三 提示词工程高级技巧 专题四 ChatGPT/GPT4的实用案例 专题五 让ChatGPT/GPT4成为你的论文助手 专题六 让ChatGPT/GPT4成为你的编程助手 专题七 让ChatGPT/GPT4进行数据处理 专题八 …