zoukankan      html  css  js  c++  java
  • 0:虚幻引擎网络架构

      虚幻引擎的网络架构这篇文章是Tim Sweeney书写的。我将在这里对自己读取到的内容进行注解和分析。

      

      1.为什么要研究虚幻网络概述?

      虚幻网络概述的组织性适合射击类型游戏,射击类型游戏具有极高的网络反馈才能支持快节奏的游戏进行下去。虚幻的网络架构就是按照这个目的展开的。自己写固然好,但是使用虚幻引擎,虚幻好才是真的好:)

      2.又是历史原因

      从非常早的Doom和《毁灭公爵》支持了Peer to Peer P2P网络功能,即点对点的游戏模式。在这种网络架构下每一个机器都是对等的,例如我按下了空格键,你的机器上也会同步我的信息,反之亦然。所有的信息都要进行复制,这很明显要进行大量的数据交换,效率并不高。

      大神John Carmark在《雷神之锤》中采用了客户端-服务器的方式。一个机器作为“服务器”,负责所有的游戏性决定。而“客户端”只负责渲染,玩家在客户端的按键信息都交给服务器进行决断。

      采用这种方式使大规模网络成为可能,游戏服务器可以在整个网络上出现。随后《雷神之锤2》进行了扩展,让客户端可以预判断服务器的行为,另外注入物理模拟也可以交给客户端自己去干。但是这样做可能会导致客户端和服务器端有微小的差异。因此引入了锁步预测协议。

      3.Tim Sweeney是怎么开始架构虚幻的呢?

      广义的客户端-服务器模型Generalized Client-Server model。他赋予了客户端更多的权利,事实上许多逻辑性内容都交给客户端自己去做,而服务器端起到了督导的作用,两个机器之间频繁的交换数据即可。服务器使用复制Replication Actor的方式将世界信息发送给客户端。除此之外你能看到Epic Games 的UE4教程中有一个Blueprint教程系列,在这里有Actor复制,函数复制,变量赋值。就这样一直沿袭了下来。

      4.开始详细研究虚幻网络架构前的内容说明和定义

      什么是服务器?在虚幻引擎中对服务器的定义是:由关卡中所有Actor的变量集合所定义。服务器控制着游戏性流程,所以服务器状态才是一个真正的游戏状态。

      虚幻引擎客户端的定义:客户端总是近似于服务器状态的模拟,近似于服务器但得需要服务器对其进行督导和同步。这个定义非常重要!存在于客户端机器上的对象,不能被当做代理。例如你玩我的游戏,你的玩家角色仅仅是对象的临时近似,而不是对象。

      5.理想网络带宽状况下的执行逻辑,我们将服务器所有控制游戏的状态信息传递给客户端

      一般理想情况下,在游戏代码Tick结束的时候,将所有需要同步复制的信息发送给每个客户端即可。但是Internet 28.8k的调制解调器,仅能满足1%的带宽来传递完整的精确更新信息。

      做网络游戏最重要的准则:永远不会存在有足够的带宽来满足完全的游戏更新复制整个游戏状态从服务器端到客户端。

      

      那么虚幻网络架构凭什么能在最为复杂的射击类游戏中,采用自己的架构将网络处理的那么好呢?等有时间再继续下一篇吧。

  • 相关阅读:
    SpringBoot安装和创建简单的Web应用
    Java设计模式-原型模式
    Java设计模式-单例模式
    Java设计模式-抽象工厂模式(Abstarct Factory)
    Java设计模式-工厂方法模式(Virtual Constructor/Polymorphic Factory)
    Java设计模式-简单工厂模式(Static Factory Method)
    Angular5学习笔记
    设置Nodejs NPM全局路径
    Actor模式初步入门
    Angular5学习笔记
  • 原文地址:https://www.cnblogs.com/NEOCSL/p/4667283.html
Copyright © 2011-2022 走看看