본문 바로가기

mingsDB

Unity WebSocket 통신

728x90

유니티에서 소켓통신을 통해 서버에서 데이터를 받아오는 방법에 대해 공부해봤습니다. 

일단 저의 경우 많은 분들이 사용하신 Websocketsharp를 이용하는 걸 시도했다가 잘 되지 않아 다른 방법을 사용했습니다. 

 

먼저 제가 사용한 것은 SocketIOUnity입니다. React에서도 사용한 Socket.io를 이용하는 방법인데, javascript로 만든 것을 C#으로 제작한 듯 합니다. 

 

사용법은 

윈도우의 Package Manager에 들어간 후 

 

git URL을 통해 Package를 다운받습니다. 이때 URL은 아래 링크를 작성해주면 됩니다. 


https://github.com/itisnajim/SocketIOUnity.git 

 

그럼 필요한  Package의 다운은 완료됩니다.

 

사용방법은 React에서 사용하던 방법과 매우 유사합니다. 

 

 client인 유니티 코드는 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using SocketIOClient;
using System;
using TMPro;
using Unity.VisualScripting;
using Newtonsoft.Json.Linq;  // JSON 데이터 파싱을 위해 추가


public class NewBehaviourScript : MonoBehaviour
{
    public SocketIOUnity socket;

    void Start()
    {
        var uri = new Uri("http://127.0.0.1:3001");
        socket = new SocketIOUnity(uri, new SocketIOOptions
        {
        	// git README의 경우 Query를 쓰던데 저는 안써도 통신이 되서 뺐습니다.
			//Query = new Dictionary<string, string>
            //{
            //    { "token", "UNITY" },
            //},
            
            Transport = SocketIOClient.Transport.TransportProtocol.WebSocket
        });

        socket.Connect();
        //연결합니다.


        socket.OnConnected += (sender, e) =>
        {
            Debug.Log("연결");
        };
        socket.OnDisconnected += (sender, e) => { Debug.Log("disconnect: " + e); };

        socket.On("0", (data) =>
        {
            Debug.Log(data);
        });

        socket.On("3", (data) =>
        {
            Debug.Log(data);
        });
    }

}

 

위와 같은 방식으로 서버에서 송신하는 "0", "3" 데이터를 수신했습니다.

 

서버인 node.js 코드는 아래와 같습니다. 

const express = require('express');
const http = require('http');
const { Server } = require('socket.io');

const app = express();
const server = http.createServer(app);
const io = new Server(server);


// Unity와의 연결이 수립되었을 때
io.on('connection', (socket) => {
    console.log('Unity client connected');

    // "0" 이벤트로 boolean 배열 전송 (Coils 데이터)
    socket.emit('0', [true, false, true, false]);

    // "3" 이벤트로 float 배열 전송 (Holding Registers 데이터)
    socket.emit('3', [0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.5, 9.0]);

    // 클라이언트가 연결을 끊을 때
    socket.on('disconnect', () => {
        console.log('Unity client disconnected');
    });
});

server.listen(3001, () => {
    console.log('Server listening on http://127.0.0.1:3001');
});

 

그 결과 아래와 같이 정보를 잘 받습니다

'mingsDB' 카테고리의 다른 글

[SCP]원격 파일 전송  (1) 2024.09.18
vs code 효과음 끄기  (0) 2024.08.28
MACs & FLOPs 측정하기  (0) 2024.07.17
Jetson nano 포트포워딩  (1) 2024.07.13
Denoising-AutoEncoder 결과에 대한 고찰(Model Collapse)  (1) 2024.06.30