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

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

"(Пользователь1): Сколько очков у всех?"

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

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

"(Пользователь1): Время прошло, скажи мне свои очки:"

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

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

"(Пользователь1): Пользователь 3 победил"

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

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

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
    }
}
Другие вопросы по тегам