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) (2) | 2024.06.30 |