所以我目前正在制作一个团结的游戏,它是一个空气曲棍球。我想添加一个多人游戏模式(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])
);
在我写完并在两个设备上构建它之后,当房间连接并且游戏开始时,对手玩家根本不移动,我不知道问题出在哪里。
有什么想法吗?
答案 0 :(得分:1)
数组基于零,因此对手用户名应该被剪切[0]和:
System.Convert.ToSingle(cut[3])
cut [3]将查找第4个分割结果,并且只有三个,因此会发生异常。这足以阻止方法工作和位置更新。如果是这样,控制台日志中也应该出错。
然而,或许甚至没有调用OnRealTimeMessageReceived。您需要引入一些断点并进行调试,或者添加一些调试日志以查看事情的进展情况。如果它甚至没有达到你期望的方法那么问题可以改为“为什么方法X没有被调用”