Unity3D RPC(远程过程调用)细节__让你调用一个远程计算机的函数

 

RPC Details


远程过程调用(RPC)让你调用一个远程计算机的函数。就好像调用一个普通函数一样容易,但也需要理解

一些重要的不同。
只要你喜欢,RPC调用可以有很多参数。所有的参数将通过网络发送。这些参数会使你的网络占用增加。因

此,你应该尽量减少你的参数。
你需要确定谁会接收你发出的RPC。有几个RPC调用模式,其范围包括了所有的常见类型。你可以轻松调用

RPC函数在每台机器,或只在在服务器上,或除你之外的每个人或者是一个特定的客户端/玩家。
RPC调用通常用于执行一些事件,根据所有游戏客户端或者特定的范围内双方的事件信息。但是,如果你愿

意你可以创造性的使用它。比如:一个游戏开始后,只有4个客户端连接后才能开始游戏。一个客户端可以

发出PRC调用到每个有标记的小组成员。一个服务器可以发送RPC到一个特定客户端,使它连接后初始化。例

如,给他用户编号,本地产生器,小队颜色,等等。一个客户端可以反过来发送到服务器,指定其开始的选

择,像他喜欢的颜色或者携带的物品。

使用RPC

调用RPC需要两步:定义和调用。声明一个函数时你需要一个前缀。
如下:
// 所有的函数声明都需要@RPC
@RPC
function PrintText (text : String)
{
    Debug.Log(text);
}
一旦声明了RPC你就可以调用他。所有网络都可以通过网络视图查看附着在同一对象上的脚本。换句话说,

你需要将包含RPC函数的脚本附加到游戏对象上,必须包含网络视图组件。
你可以使用的参数类型:
int; float; string; NetworkPlayer; NetworkViewID; Vector3; Quatemion;
调用RPC函数如下:
networkView.RPC ("PrintText", RPCMode.All, "Hello world");
此代码将使用附属的NetworkView去调用所有"PrintText()"函数,只要脚本是附属在相同的游戏对象上的。
第一个参数是函数的名字,第二个参数是谁调用这个函数,这里我们调用连接在服务器上所有PRC。但没有

告诉他缓冲客户端连接后的调用。
以下所有参数将被通过网络传递到RPC函数,这种情况下,"Hello World"将作为参数被传递。
你还可以加持额外的内部函数,如一个NetworkMessageInfo结构体,包含谁发出的RPC这样的细节。你不需

要特意略过这样的消息,所以PrintText函数可以写成:
@RPC
function PrintText (text : String, info : NetworkMessageInfo)
{
    Debug.Log(text + " from " + info.sender);
}
正如已经提到的,要使RPC函数在一个游戏对象的脚本里工作,必须有一个Network View存在。Network

View的状态同步可以设置为关闭,除非你使用的是相同Network View下的状态同步。

RPC 缓冲

RPC调用也可以被缓冲,缓冲的RPC调用为每一个新连接的客户端存储和执行。他们使一个玩家加入一个现有

游戏更加容易。一种常见的情况是,每个加入的玩家首先加载一个特殊的关卡。于是你将发送一个RPC函数

给每一个人并且将它设置为缓冲。通过缓冲,每当有新玩家加入游戏,他将自动发送到玩家。这样你就不需

要特意去跟踪玩家加入和动发送关卡加载。

同样也有一些功能,以消除RPC缓冲区。在载人关卡的例子中,如果游戏处理多个关卡,你真正关心的是有

一个新玩家加入到当前关卡。在这种情况下,你将删除任何以前加入的RPC调用。

PS:Cartoonboy 译

 

来源:http://blog.163.com/lnwanggang@yeah/blog/static/165332162201092711253443/

你可能感兴趣的:(unity3d)