Я думал это очевидный для Вас вопрос,Neodrop.
Например, делаю я многопользовательскую игру на Unity. Любой вминяемый злоумышленник вскрывает код клиента, и видет на какие RPC вызовы реагируют клиенты, и вызываает их с параметром RPCMode.All. Таким образом можно заставлять делать других клиентов, все что может заставить делать сервер. В худшем случае, если сделать дополнительные параметры, которые будут знать только отдельный клиент и сервер: злоумышленник будет засорять "эфир" + это дополнительные проверки на сервере -> забираем драгоценное процессорное время.
Это вы так собрались поэкономить трафик? Передавайте NetworkViewID и по нему определяйте.
Можно запонить NetworkViewID сервера и делать все от имени сервера, вставляя запомненный NetworkViewID в качестве параметра(пробовал лично - получается, не получается только NetworkMessageInfo подделывать, нужно копать на уровне библиотек юнити
).
Можно ли на стороне Сервера наверняка определить какой Клиент(с какого IP или его NetworkPlayer) вызвал RPC функцию на Сервере, если не передавать NetworkMessageInfo?
Если не использовать в NetworkMessageInfo в качестве параметра, на стороне сервера вычислить злоумышленника не получится!А сам NetworkMessageInfo довольно тяжолый(большой по размеру) чтобы добавлять его в каждый вызов RPC, при количестве в 1000чи подключенных игроков использование трафика увеличится значительно, и любые оптимизации по использованию трафика сойдут на нет: мне нужно Vector3 передать, а я передаю NetworkMessageInfo + Vector3!
2. Можно ли сделать чтобы Клиенты, подключенные к Серверу, могли вызывать RPC функции только на Сервере (запретить RPCMode.All, RPCMode.Others и др.)?
А это сложно сделать в коде? Зачем вам понадобились такие "запреты"?
если сделать это в коде, это также в коде можно исправить. Нужно чтобы можно было устанавливать возможные RPCMode только на сервере или запрещать объщаться клиентам между собой (авторитарный сервер).
Получается что используя технологии RPC без NetworkMessageInfo, для читерства открываюся огромные просторы..
А с NetworkMessageInfo - значительно трафик увеличивается -> замкнутый круг какой-то.