• Последние стати

  • Реклама

  • UnityDev.ru - русский портал игрового движка Unity

    Unity - игровой движок нового поколения.
    Мощный по возможностям и удобный для разрарботчиков инструмент создания 3D игр под различные платформы.

Подробности функций RPC

Удалённый вызов функций (RPC) позволяет нам осуществлять вызов функций на удалённом компьютере. Это подобно вызову обычной функции и происходит так же легко, но существует несколько важных отличий, которые необходимо знать.

 
1. У RPC вызова может быть сколько угодно параметров, всё зависит от вас. Все параметры конечно же передаются по сети. С увеличением числа параметров соответственно возрастает и востребованная пропускная способность канала. Поэтому мы должны попытаться свести к минимуму передаваемое количество параметров.

 
2. Нам необходимо определить получателя, которому мы посылаем. Существует несколько режимов вызова RPC, которых обычно достаточно для большинства случаев. Мы можем достаточно легко вызвать RPC функцию для всех, только на сервере, для всех кроме себя, или на определённом клиенте.

 
Обычно RPC вызовы используются для запуска события на всех клиентских компьютерах в игре или для передачи информации о событии между двумя сторонами, но мы можем включить воображение и использовать их как хотим. Например, есть игровой сервер, который запускается только тогда, когда наберётся 4 участника, он может разослать всем клиентам RPC вызов, что во время присоединения четвёртого игрока, игра запустится. Клиент может отправить RPC каждому игроку, чтобы сообщить, что он поднял предмет. Сервер может послать RPC только определённому клиенту, чтобы инициализировать его стартовые параметры сразу после присоединения, например, дать ему номер, задать начальную локацию, цвет команды и т.д. Клиент же в свою очередь может послать серверу RPC, чтобы передать свои базовые настройки, к примеру предпочитаемый цвет, или купленные предметы.

 

Использование RPCs

Существуют два шага, участвующих в создании RPC вызовов: декларация функции, которую вы хотите запустить, и её вызов. При декларации функции вы должны поставить префикс с атрибутом RPC.

 
Следующий код декларирует функцию RPC.

// Всем RPC запросам нужен @RPC атрибут!
@RPC
function PrintText (text : String)
{
    Debug.Log(text);
}

 

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

Вы можете использовать следующие типы переменных в качестве параметров для RPC:

  • Int
  • Float
  • String
  • NetworkPlayer
  • NetworkViewID
  • Vector3
  • Quaternion

 

Следующий код вызывает функцию RPC.

networkView.RPC ("PrintText", RPCMode.All, "Hello world");

 
Этот код будет использовать компонент Network View чтобы ссылаться на все “PrintText()” функции в любом скрипте прилагаемом к тому же объекту.
 

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

Все следующие параметры будут переданы функции RPC и посланы через сеть. В этом случае в качестве параметра, “Hello world” будет передан функции PrintText как текст.
 

Вы также можете заполучить дополнительные параметры, NetworkMessageInfo хранит дополнительную информацию, на пример кто послал RPC. Также можно декларировать PrintText функцию и по другому, без надобности специально передавать эту информацию.
 

@RPC
function PrintText (text : String, info : NetworkMessageInfo)
{
    Debug.Log(text + " from " + info.sender);
}

 
Как уже было сказано до этого, для того чтобы RPC работала внутри скрипта компонента Network View должна быть прикреплена к игровому объекту, содержащему этот скрипт. Network View’s State Synchronization может быть отключён, исключая, когда вы используете State Synchronization для данного игрового объекта.
 

Буферизация RPC

Вызов RPC также может быть кэширован. Буферизированные RPC вызовы сохраняются и будут выполняться по порядку для каждого нового подсоединившегося клиента. Эта буферизация намного облегчает программирование для игрока который присоединяется к уже бегущей игре.
 

Популярный сценарий таков: каждый игрок присоединившейся к игре должен изначально загрузить определенный уровень. В таком случае мы должны посылать буферизированные RPC запросы для всех игроков. С помощью такой буферизации новые игроки получат эти запросы. Благодаря этому нет надобности выслеживать только что подключённых игроков и посылать им RPC запросы для загрузки этапа.
 

Также у Unity имеется возможность очищать буфер RPC. К нашему примеру с загрузкой этапа, если игра распространяется на много этапов, всё о чём должен волноваться программист это присоединить игрока только к текущему этапу. В таком случае произойдёт очистка RPC вызовов с буфера, принадлежащих предыдущим этапам.
 


Оцените статью:
- 1 звёздочка- 2 звёздочки- 3 звёздочки- 4 звёздочки- 5 звёздочек (проголосовало: 12, средний бал: 5.00 из 5)
Loading ... Loading ...

версия для печати версия для печати
Вы можете следить за любыми ответами на эту запись через RSS 2.0 feed. Вы можете оставить ответ, или trackback с вашего собственного сайта.

Комментарий у “Подробности функций RPC”

  • Hellcaller
    12 Май, 2010, 6:06

    СПС полезно!

Оставить комментарий