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

时间:2017-11-23 02:26:14

标签: c# unity3d networking unity5 photon

这是一个愚蠢的问题,但我无法想象出来,我试着把它看出来,但我没看到什么,所以我认为这可能是一个好方法。 在我的游戏中,我希望客户能够向其中的每个人发送消息(不是为用户发送消息,如果不是其他客户端解释为代码的消息):

“(User1):每个人都有多少分?”

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

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

“(用户1):时间结束了,请告诉我你的观点:”

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

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

“(User1):用户3赢了”

当然,这更像是一个图形示例,我想要的是能够向所有客户端(在房间中)发送消息,以便其他客户端可以处理tjem。我想知道如何做到这一点,如果这是一个可能的低谷PUN(Unity Photon网络)。或者,如果还有其他方法可以通过UnityNetworking执行此操作。此外,这将通过局域网而不是互联网。

先谢谢你。

1 个答案:

答案 0 :(得分:2)

您正在寻找RPC:

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

这允许您仅呼叫主人,仅呼叫客户或特定播放器。

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

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

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

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

“function”是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
    }
}