Я пытаюсь отправить массив различных базовых типов по сети, используя атрибут 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 is System.String)', а затем его бросил? –