【发布时间】:2016-11-09 14:33:24
【问题描述】:
我正在尝试使用ClientRpc 属性通过网络发送各种基本类型的数组。 documentation 声明,我可以毫无问题地通过网络发送这些:
- 基本类型(byte、int、float、string、UInt64 等)
- 基本类型数组
但是,将它们混合在 object[] 数组中似乎不起作用。我有以下示例:
[Command]
void CmdForwardEvent(string eventName, object[] args) {
Debug.Log ("Broadcasting event: " + eventName);
foreach (var o in args) {
Debug.Log ("arg-class: " + o.GetType() + ": " + o);
}
RpcForwardEvent (eventName, args);
}
[ClientRpc]
void RpcForwardEvent(string eventName, object[] args) {
Debug.Log ("Received event " + eventName);
foreach (var o in args) {
Debug.Log ("arg-class: " + o.GetType() + ": " + o);
}
}
void Update() {
if (Input.GetKeyDown (KeyCode.P)) {
CmdForwardEvent("Testevent", new object[]{"some string", 1, false});
}
}
在服务器上,我得到了输出
Broadcasting event: Testevent
arg-class: System.String: some string
arg-class: System.Int32: 1
arg-class: System.Boolean: false
在客户端,这没有任何错误:
Received event: Testevent
arg-class: System.Object: System.Object
arg-class: System.Object: System.Object
arg-class: System.Object: System.Object
如何通过 ClientRpc 调用发送具有不同基本类型的各种数量的参数?
【问题讨论】:
-
但它正在工作,不是吗?您可以通过强制转换为客户端上所需的任何原始类型来拆箱值。我真的不知道是什么问题。
-
问题是我不知道客户端的类型。请注意,
GetType()为您提供了运行时的实际类型,它丢失了 -
你试过
if(o is System.String)然后投了吗? -
o is System.String返回 false。接收端的对象似乎是空对象,因为它们的 ToString 产生System.Object。我更新了问题以包含每个对象的字符串表示 -
我明白了,现在我明白了问题所在。我会试着找到一些东西。
标签: unity3d rpc unity5 unity3d-unet