読者です 読者をやめる 読者になる 読者になる

ネットワーク機能を使ったアプリケーション間の通信 (Unity)

Unity

今まで特に注目していませんでしたが、Unity5にネットワーク機能が実装されているということで、少し試してみました。

サーバープログラム

using UnityEngine;
using System.Collections;
using UnityEngine.Networking;
using UnityEngine.Networking.NetworkSystem;

public class SocketServer : MonoBehaviour {

    // Use this for initialization
    void Start () {
        SetupServer();
    }
    
    // Update is called once per frame
    void Update () {
    
    }

    public void SetupServer(){
        NetworkServer.Listen("127.0.0.1",2000);
        NetworkServer.RegisterHandler(MsgType.Connect,OnConnected);
        NetworkServer.RegisterHandler(888,OnReceive);
    }

    public void OnConnected(NetworkMessage netMsg)
    {
        Debug.Log("Connected to client");
    }

    public void OnReceive(NetworkMessage netMsg)
    {
        Debug.Log("Received");
        var recvMsg=netMsg.ReadMessage<StringMessage>();
        Debug.Log(recvMsg.value);
    }

}

クライアントプログラム

using UnityEngine;
using System.Collections;
using UnityEngine.Networking;
using UnityEngine.Networking.NetworkSystem;

public class socketClients : MonoBehaviour {
    NetworkClient myClient;

    // Use this for initialization
    void Start () {
        SetupClient();
    }
    
    // Update is called once per frame
    void Update () {
    
    }

    class Message:MessageBase{
        public string text;
    }


    public void SetupClient(){
        myClient=new NetworkClient();
        myClient.RegisterHandler(MsgType.Connect, OnConnected);
        myClient.Connect("127.0.0.1", 2000);
    }

    public void OnConnected(NetworkMessage netMsg){
        Debug.Log("Connected to server");

        var myMsg=new StringMessage("test");
        myClient.Send(888,myMsg);
    }

    public void OnReceive(NetworkMessage netMsg)
    {
        Debug.Log(netMsg.ToString());
    }
}

基本的に以下のリンク先のドキュメントの応用です。

Unity - マニュアル: ネットワークのクライアントとサーバー

サーバーにクライアントから文字列を送るだけのプログラムですが、最低限、通信は出来ますので問題はないと思います。

上のプログラムはUnityアプリ同士のものですが、本当はC++で書かれたソケット通信用のプログラムと通信したいです。 ちょっと調べただけだと良く分からなかったので、時間があったらもう少し調べて試してみます。