LoginSignup
24
28

More than 5 years have passed since last update.

[Unity]ネットワークを通してメッセージをやり取りする簡単なサンプル

Last updated at Posted at 2015-11-22

サーバとクライアント間でメッセージを送受信する簡単なサンプル.
最小構成ではNetworkManagerなどを使わなくてもネットワークを通したメッセージのやり取りができます.

  • RegisterHandlerに渡すMsgTypeを独自定義するときはMsgType.Highestより大きい値にする.
  • MessageBaseを継承したクラスのメンバをプロパティにしない

上記2点に注意しましょう.

下記のサンプルを適当なゲームオブジェクトにアタッチして実行するとコンソールに

Hello!
Hello! from server

と表示されます.

sample.cs
using UnityEngine;
using UnityEngine.Networking;

public class Sample : MonoBehaviour
{
    class Msg
    {
        public const short Text = MsgType.Highest + 1;
    }

    class Message : MessageBase
    {
        public string Text;
        // public string Text { get; set; } にするとうまく動かない
    }

    void Start()
    {
        // サーバがMsg.Textを受信したときに行う関数を登録する
        NetworkServer.RegisterHandler(Msg.Text, networkMessage =>
        {
            var mes = networkMessage.ReadMessage<Message>();
            Debug.Log(mes.Text);

            // Msg.Textを送ってきたクライアントに返信する
            networkMessage.conn.Send(Msg.Text, new Message() { Text = "Hello! from server" });
        });

        // サーバ開始
        // 他のコンピュータから接続したい場合は"0.0.0.0"などのIPを使用する
        NetworkServer.Listen("127.0.0.1", 7000);

        var client = new NetworkClient();

        // クライアントがMsg.Textを受信したときに行う関数を登録する
        client.RegisterHandler(Msg.Text, networkMessage =>
        {
            Debug.Log(networkMessage.ReadMessage<Message>().Text);
        });

        // クライアントがサーバに接続完了したときに行う関数を登録する
        client.RegisterHandler(MsgType.Connect, _ =>
        {
            // サーバにMsg.Textを送る
            client.Send(Msg.Text, new Message() { Text = "Hello!" });
        });

        // サーバに接続
        client.Connect("127.0.0.1", 7000);
    }
}

24
28
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
24
28