UE4 [翻译]Replicate的复制概念

    To give a concrete example, consider the case where you are a client in a network game. You see two opponents running towards you, shooting at you, and you hear their shots. Since all of the game state is being maintained on the server rather than on your machine, why can you see and hear those things happening?

    一个具体的例子,想象一下你作为一个客户端在网游里你相当于什么。你看到两个对手冲向你,并在射击。首先你会听到设计声。可视所有的游戏演算都是在服务端上面进行的为什么你却可以听到这行声音呢?

    You can see the opponents because the server has recognized that the opponents are relevant to you (i.e. they are visible) and the server is currently replicating those Actors to you. Thus, you (the client) have a local copy of those two player Actors who are running after you. You can see that the opponents are running toward you because the server is replicating their Location and Velocity properties to you. Between Location updates from the server, your client simulates the movement of the opponents locally. You can hear their gunshots because the server is replicating the ClientHearSound function to you. The ClientHearSound function is called for a PlayerPawn whenever the server determines that the PlayerPawn hears a sound.
     |
    你能看到你的对手因为服务器已经识别出来这些对手是和你有关联的于是服务器就从自己上面拷贝所有这些角色到你的本地。这样作为客户端你就会在本地有一个服务端上两个玩家正在追打你的拷贝。之所以你能看到其它玩家在追你是因为服务器拷贝服务器世界上的位置和速度这些属性给你的这些本地的追打你的这些角色。你可以听到枪声是因为服务器把ClientHearSound这个函数也在你本地执行了一次。ClientHearSound 是一个PlayerPawn 的函数主要是用来决定你是否能听到一个声音的。

    So, by this point, the low-level mechanisms by which Unreal multiplayer games operate should be clear. The server is updating the game state and making all of the big game decisions. The server is replicating some Actors to clients. The server is replicating some variables to clients. And, the server is replicating some function calls to clients.
      |
    说到这里,虚幻的多人游戏的最简单的机制应该已经很清楚了。服务端总是同步自己的游戏状态和做所有的游戏里的重大决策。服务端会在客户端上面复制自己里面的东西。服务端给每一个客户端复制的东西是会有不同的。最后服务端还会复制一些事件来调用客户端上面的对应函数。

    It should also be clear that not all Actors need to be replicated. For example, if an Actor is halfway across the level and way out of your sight, you do not need to waste bandwidth sending updates about it. Also, all variables do not need to be updated. For example, the variables that the server uses to make AI decisions do not need to be sent to clients; the clients only need to know about their display variables, animation variables and physics variables. Also, most functions executed on the server should not be replicated. Only the function calls that result in the client seeing or hearing something need to be replicated. So, in all, the server contains a huge amount of data, and only a small fraction of it matters to the client – the ones which affect things the player sees, hears or feels.
    Thus, the next logical question is, “How does Unreal Engine know what Actors, variables, and function calls need to be replicated?”
      |
    你还要清楚不是所有的角色都需要被复制。比如,如果有一个角色完全不在你视野范围内,你没有必要浪费带宽去发送这些同步信息。同样很多变量不需要同步,比如一些服务器上关于AI的计算过程没必要发送给客户端。客户端只要知道自己需要显示什么,做什么动画,以及物理属性是什么就好。同样,很多只在服务端用到的函数不需要同步给客户端。只有作用于客户端的视听类的事件需要同步给客户端。总之服务端处理大量的信息只要小部分是关于某个特定客户端的,比如玩家所见,所听,所感。所以下一个问题就是属于逻辑范围了,“虚幻怎么知道什么需要哪些角色需要复制给客户端哪些不需要?”

    The answer is, whoever writes the code or sets up the Blueprint for a class is responsible for determining what variables and functions need to be replicated.
     |
    答案就是,这个就是你用蓝图或者c++来决定什么需要什么不需要被同步了。

    有帮助就分享一下吧!

    转载请注明:少狼 – 敬畏知识的顽皮狗 » UE4 [翻译]Replicate的复制概念

    喜欢 3

*

已经有1 人抢在你前面了~

  • 小熊猫 5个月前 (01-09)

    感谢少狼,最近正好在动画事件里有涉及到replicate