在 Unity PUN (C#) 中向所有客户端发送消息

Its*_*oco 0 c# networking unity-game-engine photon unity5

这是一个愚蠢的问题,但我无法弄清楚,我尝试查看它,但没有什么是我想要的,所以我认为询问可能是一个好方法。在我的游戏中,我希望客户端能够向房间中的每个人发送消息(不是为用户发送的消息,如果不是为其他客户端解释为代码):

“(用户1):每个人有多少分?”

“(用户 2):嘿,我得了 5 分”

“(用户 3):嘿,我得了 10 分”

“(用户1):时间到了,说说你的观点:”

“(用户 2):嘿,我得了 20 分”

“(用户 3):嘿,我得了 30 分”

“(用户 1):用户 3 赢了”

当然,这更像是一个图形示例,我想要的是能够向所有客户端(在房间内)发送消息,以便其他客户端可以处理 tjem。我想知道怎么做,以及这是否是一个可能的低谷 PUN​​(Unity Photon Network)。或者,如果有其他方法可以通过 UnityNetworking 执行此操作。此外,这将通过 LAN 而不是通过 Internet。

先谢谢了。

dan*_*erf 6

您正在寻找 RPC:

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

这允许您仅调用主、仅客户端或特定播放器。

在您放置“[PunRPC]”的函数之前(没有 qoutes),这使得该方法可以被 RPC 调用:

[PunRPC]
public void GetScore(int score)
{
    //Do something
}
Run Code Online (Sandbox Code Playgroud)

调用 RPC 的类需要从 Pohotn.PunBehaviour 附加或扩展一个光子视图,并调用函数如下:

photonView.RPC("function", targets, arguments);
Run Code Online (Sandbox Code Playgroud)

“函数”是作为字符串的 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
    }
}
Run Code Online (Sandbox Code Playgroud)