GalaxyServer:RPC

Материал из GreatGalaxy
Перейти к: навигация, поиск

Удаленный вызов процедур

Remote Procedure Calls (RPCs, удаленные вызовы процедур) позволяют вызывать функции на удаленной машине.

Вызов RPC подобен вызову обычной функции и практически также прост, но есть некоторые важные отличия, которые необходимо понимать.

Ограничения:

  • Вызвать процедуру (метод) можно только на своем (созданном тобой) объекте.
  • Вызываемый метод должна быть помечена тегом [NetRPC]
  • Вызываемый метод должен быть публичным (public)
  • Вызов RPC может иметь столько параметров, сколько вы пожелаете, однако соответствующий сетевой трафик будет возрастать с увеличением числа и размера параметров.
  • Вызываемый метод не может ничего вернуть. т.е. должен быть void


Как это работает: На сетевом объекте (GalaxyNetId) создаем скрипт. В классе скрипта создаем метод, к примеру void Test(int i) Не забываем про правила и помечаем его тегом [NetRPC] и делаем public

GalaxyNetID netId = GetComponent<GalaxyNetID>();

[NetRPC]
public void Test(int i)
{
Debug.Log("Меня вызвали из другого клиента. И прислали число:" + i);
}

И теперь при вызове удаленно этого метода, он сработает на всех копиях (на всех сетевых клиентах) нашего сетевого объекта.

// Вызов удаленно метода
netId.CallRPC("Test", 5);

Нужно понимать, что вызов RPC произойдет и на нашей машине тоже. Если это не нужно, сделайте проверку.

GalaxyNetID netId = GetComponent<GalaxyNetID>();

[NetRPC]
public void Test(int i)
{
if (netId.isMy) return;  // Проверка, что-бы не вызвать RPC у отправителя
Debug.Log("Меня вызвали из другого клиента. И прислали число:" + i);
}


В перспективе (на рассмотрении) стоит задача способа отправки RPC и для чужих объектов.