Unity 谷歌玩游戏实时消息不发送

Posted

技术标签:

【中文标题】Unity 谷歌玩游戏实时消息不发送【英文标题】:Unity google play games realtime message not send 【发布时间】:2018-01-06 07:42:38 【问题描述】:

所以我目前正在开发一款统一的游戏,它是一种空气曲棍球。我想添加一个多人模式(1 对 1)。

因此,在玩家与对手进行比赛后,他们会在游戏开始的房间中连接起来。

但是当我想收到对方的消息时遇到了问题。

在播放器脚本移动中,我将其添加到 void update()

Multiplayer.Instance.SendMyUpdate(positionX, PositionZ);

在多人游戏脚本中,我添加了这个:

public void SendMyUpdate(float posX, float posZ) 

    string PlayerUserNameString = PlayGamesPlatform.Instance.RealTime.GetSelf ().DisplayName;
    char[] characters = PlayerUserNameString.ToCharArray ();
    string data = characters + ":" + posX + ":" + posZ;
    byte[] bytedata = System.Text.ASCIIEncoding.Default.GetBytes (data);
    PlayGamesPlatform.Instance.RealTime.SendMessageToAll (false, bytedata);

关于 OnRealTimeMessageReceived 方法:

string rawdata = System.Text.ASCIIEncoding.Default.GetString (data);
string[] cut = rawdata.Split (new string[]  ":" , System.StringSplitOptions.RemoveEmptyEntries);

OpponentUserName = System.Convert.ToSingle (cut[1]).ToString();

Transform target = GameObject.Find ("mallet Opponent").transform;

        Vector3 newpos = new Vector3
        (
                System.Convert.ToSingle(cut[2]),
                0,
                System.Convert.ToSingle(cut[3])
        );

在我写完这个并在两台设备上构建之后,当房间连接并开始游戏时,对手玩家根本不动,我不知道问题出在哪里。

有什么想法吗?

【问题讨论】:

【参考方案1】:

数组是从零开始的,所以对手的用户名应该被删减[0]并且:

System.Convert.ToSingle(cut[3])

cut[3] 将寻找第 4 个拆分结果,并且只有三个,因此会发生异常。这足以阻止方法工作和位置更新。如果是这样,控制台日志中也应该有错误。

但是也许 OnRealTimeMessageReceived 甚至没有被调用。您需要输入一些断点并进行调试,或者添加一些调试日志以查看进展情况。如果它甚至没有达到您期望的方法,那么问题可以改写为“为什么没有调用方法 X”

【讨论】:

以上是关于Unity 谷歌玩游戏实时消息不发送的主要内容,如果未能解决你的问题,请参考以下文章

谷歌玩游戏实时多人游戏如何获得快速匹配玩家的名字?

从另一个活动发送实时消息

当玩家通过邀请连接时,实时消息不起作用

使用谷歌的 Unity3d 插件自定义 UI 的谷歌玩游戏服务排行榜

unity安卓开发尺寸

unity制作赛车游戏,车子加了刚体和碰撞体为啥车子死活不动?