UNITY中的networkView ViewID RPC

时间:2014-05-08 01:42:28

标签: unity3d

我是团结的新手,我认为这将是一块蛋糕,但现在我觉得我咬得比我嚼得多。

我正在尝试建立一个权威的服务器游戏,客户端玩家将他们想要的动作发送到服务器,然后服务器向所有客户端发送实际的移动位置信息。

当客户端连接到服务器时,服务器使用RPC调用在所有客户端上创建播放器对象。在播放器脚本Awake()函数中,我创建了一个NetworkView对象,并将其动态附加到播放器对象以进行同步。因此,当每个新玩家连接到游戏服务器时,所有玩家客户都这样做,所以每个人都可以看到其他人。

我遇到的问题是当玩家客户端想要移动时,客户端尝试使用动态附加的NetworkView对服务器进行RPC调用,以发送所需的移动,但RPC调用失败,给出了SERVER(而不是客户端)上的错误,服务器无法找到NetworkViewID

我的代码没有打印出这个错误,所以我猜它必须是内部的代码,当它从客户端收到RPC消息时打印出来,并尝试将其与相应的NetworkViewID匹配服务器,当它不能,它打印错误?

我只是想知道团结是如何工作的......对所有客户端和服务器上的对象“A”具有相同的NetworkViewID,并且所有客户端和服务器上的对象“B”具有相同的ID(但是来自“A”的不同ID?

如果是这样,那么在客户端和服务器上实例化的NetworkView对象如何知道自己分配哪个ID,这样当它们通过网络在不同的计算机上完成时它们都匹配?这是由unity自动完成的,还是我必须自己将ID发送给所有NetworkView个对象?但我无法与对象交谈,告诉他们使用哪个ID,因为我首先不知道NetworkID,因为显然需要与NetworkView对象交谈!它就像试图问某人他们的名字,但你需要他们的名字才能问他们。所以它无法运作。

我的问题是,首先,玩家对象上没有NetworkView。创建对象后,播放器对象上的脚本会动态附加NetworkView。由于这是在所有客户端上完成的,并且几乎同时在服务器上完成,他们如何知道将相同的ID分配给相同的对象,以便它们可以相互RPC?

我还在某处读到“所有者ID”始终为零?

对不起,我是团结的新手,并试图全力以赴。所有人都可以给我内幕消息吗?

0 个答案:

没有答案