2017-06-20 6 views
0

私はUnity Engineを使用してAndroid用ゲームを作っています。私はマルチプレイヤー向けにGoogle Playゲームサービスを使用しています。私は他のプレーヤーに文字列メッセージを送るときに問題があります。私はそれを送ることができますが、他のプレイヤーはそれを覚えていません。Unity Android Google Playサービス - 文字列メッセージを送信

送信コード:

public void SendMyUpdate(float posX, float posZ, Vector3 velocity, float rotY, float weapon, string opponentId) 
{ 
    DebugConsole.Log("OppenentSend " + opponentId); 
    bytesize = opponentId.Length * sizeof(byte); 
    _updateMessageLength = 26 + bytesize; 
    _updateMessage.Clear(); 
    _updateMessage.Add(_protocolVersion); 
    _updateMessage.Add((byte)'U'); 
    _updateMessage.AddRange(BitConverter.GetBytes(posX)); 
    _updateMessage.AddRange(BitConverter.GetBytes(posZ)); 
    _updateMessage.AddRange(BitConverter.GetBytes(velocity.x)); 
    _updateMessage.AddRange(BitConverter.GetBytes(velocity.z)); 
    _updateMessage.AddRange(BitConverter.GetBytes(rotY)); 
    _updateMessage.AddRange(BitConverter.GetBytes(weapon)); 
    //_updateMessage.AddRange(BitConverter.GetBytes(opponentHp)); 
    _updateMessage.AddRange(System.Text.Encoding.UTF8.GetBytes(opponentId));  
    byte[] messageToSend = _updateMessage.ToArray(); 
    PlayGamesPlatform.Instance.RealTime.SendMessageToAll(false, messageToSend); 
} 

Recivedコード:

public void OnRealTimeMessageReceived(bool isReliable, string senderId, byte[] data) 
{ 
    // We'll be doing more with this later... 
    byte messageVersion = (byte)data[0]; 
    // Let's figure out what type of message this is. 
    char messageType = (char)data[1]; 
    if (messageType == 'U' && data.Length == _updateMessageLength) 
    { 
     float posX = BitConverter.ToSingle(data, 2); 
     float posZ = BitConverter.ToSingle(data, 6); 
     float velX = BitConverter.ToSingle(data, 10); 
     float velZ = BitConverter.ToSingle(data, 14); 
     float rotY = BitConverter.ToSingle(data, 18); 
     float weapon = BitConverter.ToSingle(data, 22); 
     //int opponentHp = BitConverter.ToInt16(data, 26); 
     string opponentId = System.Text.Encoding.UTF8.GetString(data); 

     // We'd better tell our GameController about this. 
     if (updateListener != null) 
     { 
      updateListener.UpdateReceived(senderId, posX, posZ, velX, velZ, rotY, weapon, opponentId); 
      DebugConsole.Log("OppenentRecived " + opponentId); 
     } 
    } 
    else if (messageType == 'F' && data.Length == _finishMessageLength) 
    { 
     // We received a final time! 
     float finalTime = System.BitConverter.ToSingle(data, 2); 
     //Debug.Log ("Player " + senderId + " has finished with a time of " + finalTime);  
    } 

これは、あなたがコンバータはバイトを見つける必要がありますどこのインデックスを追加するのを忘れないでください https://www.raywenderlich.com/87042/creating-cross-platform-multi-player-game-unity-part-2

答えて

0

から、このコードを持って範囲

ie: string opponentId = System.Text.Encoding.UTF8.GetString(data, int index); 
+1

貢献していただきありがとうございますが、このような反応は答えではなく、コメントとみなされます。有意義な貢献をしたい場合は、[質問への回答方法](https://stackoverflow.com/help/how-to-answer)をお読みください。あなたがこのサイトに貢献し続けるならば、あなたは結局このようなコメントを残すために十分な評判を得るでしょう。 [評判に関するこの説明を参照](https://stackoverflow.com/help/whats-reputation)。 – Nik

関連する問題