Unity | NGO网络框架

news2024/9/24 11:25:55

目录

 一、相关属性及变量

1.ServerRpc属性

2.ClientRpc属性

3.NetworkVariable变量

二、相关组件

1.NetworkManager

2.Unity Transport

3.Network Object

4.NetworkBehaviour:

5.NetworkTransform

Syncing(Synchronizing)

Thresholds

Interpolation

三、Demo

1.同步位置及颜色

2.NetworkTransform应用


        Netcode for GameObjects(简称Netcode或NGO)是一个为Unity构建的高级网络库,可用于抽象化网络逻辑,抽象化网络逻辑是指将网络通信的复杂性和细节隐藏在一个高级接口之后,使开发者能够更专注于构建游戏,而无需深入了解底层的网络协议和通信机制。Netcode提供了简单的网络操作,让我们能够更方便的将GameObject和世界数据通过网络会话发送给多个玩家或接收,并在多个玩家之间同步数据。

        官网:Unity Multiplayer Networking | Unity Multiplayer Networking

 一、相关属性及变量

1.ServerRpc属性

        被添加到方法上以标记方法为远程过程调用,ServerRpc在客户端调用,服务器端执行。

[ServerRpc]
public void ColorServerRpc()//注意函数以ServerRpc为后缀
{
    Debug.Log("来自客户端的请求,server ColorServerRpc:"+ material.color);
    if (NetworkManager.Singleton.IsServer)//判断可省略
        ColorClientRpc(material.color);
}

2.ClientRpc属性

        被添加到方法上以标记他们为远程过程调用,ClientRpc在服务器端调用,但是会在客户端执行。

[ClientRpc]
public void ColorClientRpc(Color color)//注意函数名以ClientRpc为后缀
{
    Debug.Log("来自服务端的要求,ColorClientRpc:"+ color);
    GetComponent<MeshRenderer>().material.color = color;
}

3.NetworkVariable变量

        这是一种特殊类型的变量,当服务器中的NetworkVariable<T>的值发生更改时,任何已连接的客户端会自动同步;在游戏中途加入的客户端会自动同步服务器的当前状态。

        NetworkVariable<T>也对外提供值被修改时触发的回调OnValueChanged 。

public NetworkVariable<Color> ServerColor = new NetworkVariable<Color>();

[ServerRpc]
public void ColorServerRpc()
{
    ServerColor.Value = material.color;
}
void Update()
{
    GetComponent<MeshRenderer>().material.color=ServerColor.Value;
}

二、相关组件

1.NetworkManager

        可通过该组件来启动不同的端。该组件是整个NGO中最为重要的组件,包含了项目中所有与网络代码相关的设置,可以说netcode的中心。它提供了启动和停止作为主机(Host)、客户端(Client)或服务器(Server)的功能。

  • Player Prefab:玩家角色的预制件。
  • Host :启动服务器并以客户端的形式加入,同时充当服务器和客户端的角色。
  • Client :以客户端玩家的形式加入服务器,负责向服务发送请求和接收来自服务端的数据更新。
  • Server :以服务器的形式启动游戏,通常用于专门运行游戏逻辑而不参与任何客户端交互操作场景。一旦客户端连接成功,服务器通常会为该客户端实例化一个 Player Prefab。

2.Unity Transport

        设置IP、端口号、连接超时、最大连接数、心跳超时等。

3.Network Object

         这是附加到Player Prefab上的一个组件,它标记了该对象需要在网络上进行同步。

4.NetworkBehaviour

        NetworkBehaviour是一个抽象类,继承自MonoBehavior 。一个自定义脚本类继承自此类可以实现网络行为。它允许你同步变量、调用远程过程调用(RPCs)、命令以及客户端Rpc方法。

    public class HelloWorldPlayer : NetworkBehaviour
    {
        public NetworkVariable<Color> ServerColor = new NetworkVariable<Color>();
        Material material;
        public override void OnNetworkSpawn()
        {
            material = new Material(Shader.Find("Standard"));
            material.color = Color.HSVToRGB(Random.Range(0f, 1f), 1f, 1f);
            GetComponent<MeshRenderer>().material = material;
            if (IsOwner)
            {
                ColorServerRpc();
            }
        }
        //统一颜色
        [ServerRpc]
        public void ColorServerRpc()
        {
            Debug.Log("来自客户端的请求,server ColorServerRpc:"+ material.color);
            if (NetworkManager.Singleton.IsServer)//判断可省略
                ColorClientRpc(material.color);
        }
        [ClientRpc]
        public void ColorClientRpc(Color color)
        {
            Debug.Log("来自服务端的要求,ColorClientRpc:"+ color);
            GetComponent<MeshRenderer>().material.color = color;
        }
    }

5.NetworkTransform

        同步物体的Transform是Netcode当今多人游戏中最常见的任务之一 。参考文档

  • Syncing(Synchronizing)

        这个是用来指定同步位置,旋转,缩放的,需要同步哪些值就勾选哪些。一般情况下,不需要同步GameObject的所有变换值。例如,如果GameObject的缩放从不改变,可以在面板中的Syncing Scale禁用。禁用同步可以节省CPU成本和网络带宽。

  • Thresholds

        可以使用阈值来设置最小阈值。这可以用来通过只同步大于或等于阈值值的变化(低于阈值的变化不会同步)来降低同步更新的频率。

  • Interpolation

        默认情况下启用了插值。插值会缓冲传入的状态更新,这可能会在authoritative实例(服务端)和非authoritative实例(客户端)之间引入轻微的延迟。当禁用插值属性时,变换的更改会立即应用到非authoritative实例上,这可能会导致视觉上的"抖动",或者在延迟较高时似乎会"跳跃"到新应用的状态更新。

1. lerp通常用于数值和向量的插值,而slerp主要用于四元数的插值,尤其是在处理旋转时。2. lerp的计算成本较低,因为它是直接的线性运算;与之相比,slerp更为复杂,计算成本较高,但结果在某些情况下更为理想。

三、Demo

1.同步位置及颜色

        利用ServerRpc属性及ClientRpc属性、NetworkVariable变量实现位置及颜色的同步。

2.NetworkTransform应用

        player上挂载Network Transform组件、Network Object组件及下面函数:

public class NetworkTransformTest : NetworkBehaviour
{ 
    void Update()
    {
        if (IsServer)
        {
            float theta = Time.frameCount / 10.0f;
            transform.position = new Vector3((float)Math.Cos(theta), 0.0f, (float)Math.Sin(theta));
            Debug.Log("Change Position");
        }
    }
}

记录:在线转换视频文件 (aconvert.com)

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

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

相关文章

windows通过ssh连接Liunx服务器并实现上传下载文件

连接ssh 输入&#xff1a;ssh空格用户名ip地址&#xff0c;然后按Enter 有可能出现下图提示&#xff0c;输入yes 回车即可 输入 password &#xff0c;注意密码是不显示的&#xff0c;输入完&#xff0c;再按回车就行了 以上是端口默认22情况下ssh连接&#xff0c;有些公司它…

【VSCode】CMake Language Support 总是下载 .NET 超时,但又不想升级dotnet

错误信息 Error: Could not resolve dotnet path!An error occurred while installing .NET (6.0): .NET Acquisition Failed: Installation failed: Error: .NET installation timed out. You may need to change the timeout time if you have a slow connection. Please se…

VuePress部署到GitHub Pages

一、git push自动部署 1、创建用于工作流的文件 在项目根目录下创建一个用于 GitHub Actions 的工作流 .yml 文件 name: docson:# 每当 push 到 main 分支时触发部署push:branches: [main]# 手动触发部署workflow_dispatch:jobs:docs:runs-on: ubuntu-lateststeps:- uses: a…

湖仓架构的演进

1.数据仓库架构的历史演进 起初&#xff0c;业界数据处理首选方式是数仓架构。通常数据处理的流程是把一些业务数据库&#xff0c;通过ETL的方式加载到Data Warehouse中&#xff0c;再在前端接入一些报表或者BI的工具去展示。 数据仓库概念是 Inmon 于 1990 年提出并给出了完…

Spark Streaming的容错性与高可用性

在实时数据处理领域&#xff0c;容错性和高可用性是至关重要的。Apache Spark Streaming是一个强大的工具&#xff0c;用于实时数据处理和分析&#xff0c;具备卓越的容错性和高可用性。本文将深入探讨Spark Streaming的容错性机制&#xff0c;以及如何实现高可用性的实时数据处…

docker 部署haproxy cpu占用特别高

在部署mysql 主主高可用时&#xff0c;使用haproxy进行负载&#xff0c;在服务部使用的情况下发现服务器cpu占比高&#xff0c;负载也高&#xff0c;因此急需解决这个问题。 1.解决前现状 1.1 部署配置文件 cat > haproxy.cfg << EOF globalmaxconn 4000nbthrea…

【FPGA/verilog -入门学习16】fpga状态机实现

需求&#xff1a; 用两段式状态机设计序列码检测机。这个序列码检测机用于检索连续输入的 1bit 数据 &#xff08;每个时钟周期输入 1bit&#xff09;&#xff0c;当检测到一串“101100”的输入数据时&#xff0c;产生一个时钟周期的 高脉冲指示信号 状态图 //实现状态机切…

OSI 模型和 TCP/IP 模型的异同

开放式系统互联模型&#xff08;OSI&#xff09;是一个参考标准&#xff0c;解释协议相互之间应该如何相互作用。TCP/IP协议是美国国防部发明的&#xff0c;是让互联网成为了目前这个样子的标准之一 OSI&#xff1a;物理层&#xff0c;数据链路层&#xff0c;网络层&#xff0…

【2023 CCF 大数据与计算智能大赛】基于TPU平台实现超分辨率重建模型部署 基于Real-ESRGAN的TPU超分模型部署

2023 CCF 大数据与计算智能大赛 《基于TPU平台实现超分辨率重建模型部署》 洋洋很棒 李鹏飞 算法工程师 中国-烟台 2155477673qq.com 团队简介 本人从事工业、互联网场景传统图像算法及深度学习算法开发、部署工作。其中端侧算法开发及部署工作5年时间。 摘要 本文是…

mysql5.7安装-windows安装版本

下载地址 官网地址:https://www.mysql.com/官网下载地址:https://dev.mysql.com/downloads/mysql/阿里云镜像站下载:https://mirrors.aliyun.com/mysql/华为云镜像站地址:https://mirrors.huaweicloud.com/home华为云镜像站下载:https://mirrors.huaweicloud.com/mysql/Downlo…

【go语言】select多路选择

select基础知识 select 是 Go 语言中用于处理通道操作的控制结构&#xff0c;它类似于 switch 语句&#xff0c;但专门用于通道的选择。select 语句使得一个 goroutine 可以等待多个通道操作&#xff0c;当其中任意一个通道操作可以进行时&#xff0c;就会执行相应的 case 分支…

TS学习笔记一:认识TS及环境准备

本次学习笔记是具有一定js基础的情况下从头开始学习ts相关内容。 视频信息 TS学习笔记一&#xff1a;认识TS及环境准备 B站视频 TS学习笔记一&#xff1a;认识TS及环境准备 西瓜视频 https://www.ixigua.com/7320049274006274560 1.1.目的 通过本次学习&#xff0c;学习并…

Linux第13步_安装“vim编辑器”及应用介绍

学习“磁盘重新分区”后&#xff0c;嵌入式Linux系统环境搭建进入安装“vim编辑器”这个环节。vim编辑器可以用来修改文件&#xff0c;在后期使用中&#xff0c;会经常用到。 1、安装“vim编辑器” 输入“sudo apt-get install vim回车”&#xff0c;就可以执行安装“vim编辑…

【AI视野·今日Sound 声学论文速览 第三十七期】Tue, 31 Oct 2023

AI视野今日CS.Sound 声学论文速览 Tue, 31 Oct 2023 Totally 11 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Sound Papers DCHT: Deep Complex Hybrid Transformer for Speech Enhancement Authors Jialu Li, Junhui Li, Pu Wang, Youshan Zhang当前大多数基于深…

运维系列:此站点的连接不安全,使用不受支持的协议。ERR_SSL_VERSION_OR_CIPHER_MISMATCH(不支持的协议 客户端和服务器不支持常用的 SSL 协议版本或密码套件。)

此站点的连接不安全&#xff0c;使用不受支持的协议。ERR_SSL_VERSION_OR_CIPHER_MISMATCH&#xff08;不支持的协议 客户端和服务器不支持常用的 SSL 协议版本或密码套件。&#xff09; 前言一、解决方法一1.Microsoft Edge浏览器→点击右上角的三个点→选择设置2.选择外观→打…

【代码随想录】刷题笔记Day46

前言 刚考完自辩&#xff0c;Chat回答举例什么的真方便。早上做组会PPT去了&#xff0c;火速来刷题&#xff01; 139. 单词拆分 - 力扣&#xff08;LeetCode&#xff09; 单词是物品&#xff0c;字符串s是背包&#xff0c;单词能否组成字符串s&#xff0c;就是问物品能不能把…

智云影院CMS程序PHP源码V3.0 无需数据库

本程序无需数据库&#xff0c;直接上传源码即可访问&#xff0c;&#xff08;服务器或虚拟主机空间&#xff09;都可以搭建使用&#xff01;模板自适应端&#xff0c;浏览体验更佳&#xff01;安装操作简单&#xff01;无需繁琐的操作&#xff0c;即可快速拥有一个视频看片资源…

transforms图像增强(一)

一、数据增强 数据增强&#xff08;Data Augmentation&#xff09;是一种常用的数据预处理技术&#xff0c;通过对训练集进行各种变换和扩增操作&#xff0c;可以增加训练数据的多样性和丰富性&#xff0c;从而提高模型的泛化能力。 数据增强的目的是通过对训练集中的图像进行…

JVM工作原理与实战(七):类的生命周期-初始化阶段

专栏导航 JVM工作原理与实战 RabbitMQ入门指南 从零开始了解大数据 目录 专栏导航 前言 一、类的生命周期 1.加载&#xff08;Loading&#xff09; 2.连接&#xff08;Linking&#xff09; 3.初始化&#xff08;Initialization&#xff09; 4.使用&#xff08;Using&…

面试算法96:字符串交织

题目 输入3个字符串s1、s2和s3&#xff0c;请判断字符串s3能不能由字符串s1和s2交织而成&#xff0c;即字符串s3的所有字符都是字符串s1或s2中的字符&#xff0c;字符串s1和s2中的字符都将出现在字符串s3中且相对位置不变。例如&#xff0c;字符串"aadbbcbcac"可以由…