我試圖通過網絡使用ClientRpc
屬性發送各種基本類型的數組。該documentation狀態,我可以把這些在網絡沒有問題:通過ClientRPC調用發送一組基本類型
- 基本類型(字節,整型,浮點,字符串,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()'給你在運行時的_actual類型,它已經丟失了 – Felk
你試過'if(o是System.String)'然後強制轉換嗎? –