Отправка сообщений всем клиентам в Unity PUN (C#)

это глупый вопрос, но я не могу понять его, я пытался его найти, но ничего не искал, поэтому я подумал, что спросить может быть хорошим способом. В моей игре я хотел бы, чтобы клиент мог отправлять сообщения (сообщения не для пользователей, если бы не другие клиенты, интерпретируемые в код) всем в своей комнате:

"(User1): Сколько очков у каждого?"

"(User2): Эй, я получил 5 баллов"

"(User3): Эй, я получил 10 баллов"

"(User1): Время вышло, скажи мне свои баллы:"

"(User2): Эй, я получил 20 баллов"

"(User3): Эй, я получил 30 баллов"

"(Пользователь1): Пользователь 3 выиграл"

Конечно, это скорее графический пример, я хочу иметь возможность отправлять сообщения всем клиентам (в комнате), чтобы другие клиенты могли обрабатывать tjem. Я хотел бы знать, как это сделать и возможно ли это через PUN (Unity Photon Network). Или если есть другой способ сделать это через UnityNetworking. Кроме того, это будет через локальную сеть, а не через Интернет.

Заранее благодарю.


person Itsmoloco    schedule 23.11.2017    source источник


Ответы (1)


Вы ищете RPC:

https://doc.photonengine.com/en-us/pun/current/gameplay/rpcsandraiseevent

Это позволяет вам звонить только мастеру, только клиентам или конкретному игроку.

Перед функцией, которую вы поместили «[PunRPC]» (без кавычек), это делает метод доступным для вызова RPC:

[PunRPC]
public void GetScore(int score)
{
    //Do something
}

Класс, который вызывает RPC, требует, чтобы photonview был прикреплен или расширен от Pohotn.PunBehaviour, и вызывает функцию следующим образом:

photonView.RPC("function", targets, arguments);

«Функция» — это rpc в виде строки, в примере это будет GetScore, целью может быть либо экземпляр PhotonPlayer, либо вы можете использовать перечисление PhotonTargets.

Мне нравится создавать одноэлементный класс, который обрабатывает RPC (помните, это работает, только если класс имеет только 1 экземпляр):

using UnityEngine;

public class RPC : Photon.PunBehaviour
{
    public static RPC singleton;

    private void Awake()
    {
        if(singleton != null && singleton != this)
            Destroy(this);
        singleton = this;
    }

    //Called by someone who wants to set the score
    public void CallSetScore(sbyte score)
    {
        this.photonView.RPC("SetScore", PhotonTargets.All, score);
    }

    [PunRPC]
    public void SetScore(sbyte score)
    {
        //Do something with the score
    }
}
person danivdwerf    schedule 17.04.2018
comment
Я также объяснил свой предыдущий ответ, почему отрицательный голос? - person danivdwerf; 17.04.2018