-
Unity] 유니티에서 MQTT 사용하기Network 2025. 3. 26. 15:33반응형
https://www.emqx.com/en/blog/using-mqtt-in-unity-with-m2mqttunity-library-a-step-by-step-guide
Using MQTT in Unity with M2MqttUnity Library: A Step-by-Step Guide
This blog provides a simple Unity3d project for using M2MQTT with Unity. The project includes an example scene with a user interface for managing the connection to the broker and testing messaging.
www.emqx.com
이 사이트가 정말 많은 도움이 되었다.
1. 유니티 설치
필자는 2021.3.20f1 버전을 사용하였다.
프로젝트를 만들 때 3D로 만드는 것이 좋다.
2. M2MqttUnity 프로젝트 다운로드
https://github.com/CE-SDV/M2MqttUnity
GitHub - CE-SDV/M2MqttUnity: M2MQTT for Unity
M2MQTT for Unity. Contribute to CE-SDV/M2MqttUnity development by creating an account on GitHub.
github.com
MQTT를 이용해 메시지 test를 위한 플러그인.
<>Code 버튼을 눌러 Download ZIP 하여 압축 풀고 Unity Asset 파일에 넣어주면 된다.
3. M2MqttUnity_Test Scene 실행
M2MqttUnity-master - Asset - M2MqttUnity - Examples - Scenes 폴더에 들어가면 M2MqttUnity_Test 씬이 있다.
클릭하여 플레이해주면 위와 같은 장면이 나타난다.
Hierarchy 창에 M2MQTT 라는 오브젝트가 있는데, M2Mqtt Unity Test 스크립트를 달고 있다.
여기서 입력 필드 값을 바꾸면 플레이 할 때 값이 이 값으로 바뀐다.
- Broker Address : 브로커 주소
- Broker Port : 브로커 포트 번호
- Is Encrypted : 암호화 되었는지 여부. 체크하면 암호화 된 연결. SSL/TLS 기반 연결일 때 체크
- Certificate Name : SSL 인증서 사용 시, 특정 인증서를 참조할 수 있는 이름
- Connection Delay : 자동 연결 시, 연결 시도 전 대기 시간(초). Auto Connect 가 체크되어 있어야 함
- Timeout On Connection : 연결 시도 제한 시간(초)
- Auto Connect : Scene 시작 시, 자동으로 MQTT 연결 시도
- MQTT User Name : 브로커 인증용 사용자 이름
- MQTT Password : 브로커 인증용 비밀번호
- Auto Test : MQTT 연결 후 자동으로 메시지를 테스트 발행/구독 하는 기능
아래 무료 공개 MQTT 브로커를 사용하였다.
Server: broker.emqx.io TCP Port: 1883 WebSocket Port: 8083 SSL/TLS Port: 8883 Secure WebSocket Port: 8084
TCP 포트와 SSL/TLS 포트 번호는 사용가능했지만, WebSocket 포트는 사용이 불가했다.
M2Mqtt에선 지원하지 않는다고 하는 것 같다... 이에 관해 정보가 필요합니다.......
설정에 맞게 입력해주고 Connect 버튼을 클릭하면 올바르게 잘 연결된다.
이 상태에서 메시지를 주고 받아볼건데 이에 한 가지 더 프로그램이 필요하다.
4. MQTTX 다운로드
MQTTX: Your All-in-one MQTT Client Toolbox
MQTTX: A powerful, all-in-one MQTT 5.0 client toolbox for desktop, CLI and WebSocket, it makes developing and testing MQTT applications faster and easier.
mqttx.app
우리에겐 ... 구독자인 클라이언트가 필요하다.
위 링크에 들어가서 MQTTX 를 설치한다.
+ 버튼을 클릭해 New Connection을 만들어준다. 위에 기입하는 내용은 아까 유니티에서 입력한 것과 같게 해주면 된다.
약간 다른 점은 호스트 주소인데, mqtt:// mqtts:// ws:// wss:// 가 있다.
주소에 알맞은 것으로 고르면 된다.
성공적으로 설정했으면 > Connect 버튼을 눌렀을 때 잘 연결될 것이다.
+ New Subscript 버튼을 클릭해서 토픽을 추가해주면 되는데, 토픽은 메시지를 교환하는 채널로 생각하면 된다.
/ 를 이용해 폴더처럼 계층 구조를 만들 수 있으며, 여기서 처음 발행은 Unity에서 하고 MQTTX에서 구독하는 구조로 진행된다.
M2MqttUnityTest.cs Unity Test Scene에 있는 client.Publish(); 를 확인하면 테스트 토픽을 확인할 수 있다.
TestPublish(string topic, byte[] message, byte qosLevel, bool retain)
테스트 토픽은 "M2MQTT_Unity/test" 이고 QoS는 0 (At most once) 이므로 그대로 기입하여 생성해준다.
이제 메시지를 주고 받아 볼건데
메시지를 서로 송수신하려면 양 쪽 다 같은 토픽을 구독하고 있어야한다.
유니티 코드를 살펴보면 구독(연결 시 호출)/구독취소(연결 해제 시 호출) 함수에 "M2MQTT_Unity/test" 토픽이 들어가있다.
MQTTX에서 New Subscription을 생성 한 과정이 아래 코드와 같다고 생각하면 된다.
M2MqttUnityClient.cs 유니티를 플레이 해주고 Connect 버튼을 누른다. (브로커와 연결)
MQTTX에서도 재생 버튼을 눌러 브로커와 연결해준다.
유니티에서 먼저 Test Publish를 눌러 메시지를 발행해준다.
성공적으로 메시지가 브로커에게 전송되었으면 Received : Test message 로그가 뜬다.
이제 MQTTX를 확인해보자. 같은 토픽을 구독했으면 Test message 라는 메시지가 와야한다.
성공적으로 메시지를 받았다면 MQTTX 에서 메시지를 보내보자.
입력 박스엔 두 개의 필드가 있는데 윗쪽 필드엔 토픽을 적어줘야한다.
그리고 아래엔 메시지를 적어준다. (Plaintext 형식)
전송 버튼을 누르면 메시지가 전송되고, 성공적으로 전송이 됐다면 유니티에서 같은 내용으로 메시지를 보낸다!
아래 이미지들은 성공적으로 메시지를 주고 받았을 때의 화면이다.
유니티와 브로커, MQTTX 구조
대략 이렇게 되어 있다고 생각하면 된다.
틀린 지식이나 애매모호한 지식이 있으면 댓글로 남겨주시면 바로 반영하겠습니다.
반응형'Network' 카테고리의 다른 글
혼공네트] 6주차 - 과제 : Ch6 - Ch7. 네트워크 실습 및 심화 과정 (0) 2025.02.25 혼공네트] 5주차 - 과제 : Ch5. 응용 계층 (1) 2025.02.19 혼공네트] 4주차 - 과제 : Ch4. 전송 계층 (0) 2025.02.11 네트워크] IP 주소 (0) 2025.02.02 네트워크] ARP (Address Resolution Protocol) (0) 2025.02.02