【问题标题】:Sending messages to all clients in Unity PUN (C#)在 Unity PUN (C#) 中向所有客户端发送消息
【发布时间】:2017-11-23 02:26:14
【问题描述】:

这是一个愚蠢的问题,但我想不通,我试着找出来,但没有什么是我想要的,所以我认为询问可能是一个好方法。 在我的游戏中,我希望客户端能够向房间里的每个人发送消息(消息不是给用户,如果不是让其他客户端解释成代码):

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

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

“(User3):嘿,我得了10分”

“(User1):时间到了,告诉我你的观点:”

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

“(User3):嘿,我得了30分”

“(用户 1):用户 3 获胜”

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

谢谢你。

【问题讨论】:

    标签: c# unity3d networking unity5 photon


    【解决方案1】:

    您正在寻找 RPC:

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

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

    在你放“[PunRPC]”的函数之前(没有 qoutes),这使得方法可以被 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
        }
    }
    

    【讨论】:

    • 我已经进一步解释了我之前的回答,为什么要投反对票?
    猜你喜欢
    • 2019-04-29
    • 1970-01-01
    • 2016-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-14
    相关资源
    最近更新 更多