이곳 저곳 검색하면서 공부한 내용을 정리.
1. 유니티용 Socket.io 라이브러리를 받아야 한다.
https://github.com/NetEase/UnitySocketIO
*링크의 주석을 보면 socketio4net.Client 를 베이스로 하여 유니티 용으로 만든 것이라는 설명이 있다.
2. bin 폴더에 있는 라이브러리 파일들을 유니티 프로젝트에 임포트한다.
간단한 에코서버 만들기
3. GameObject를 만들고 SocketManager.cs 스크립트 파일을 컴포넌트로 추가해준다.
4. SocketManager.cs 의 내용
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | using UnityEngine; using System.Collections; using SocketIOClient; public class SocketManager : MonoBehaviour { string url = "http://127.0.0.1:999/"; public static Client Socket { get; private set; } void Awake() { Socket = new Client(url); Socket.Opened += SocketOpened; Socket.Connect(); } private void SocketOpened(object sender, System.EventArgs e) { Debug.Log("Socket Opened"); } void OnDisable() { Socket.Close(); } } | cs |
Awake 에서 Client 를 생성하고 접속을 시작한다.
5. 메세지를 보낼 UI를 작업하고 ChatTest.cs 스크립트를 컴포넌트로 추가해준다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | using UnityEngine; using System.Collections; using System.Collections.Generic; using UnityEngine.UI; public class ChatTest : MonoBehaviour { public Text chatText; public Text chatWindow; List<string> buffer = new List<string>(); // Use this for initialization void Start() { SocketManager.Socket.On("rMsg", (data) => { Debug.Log(data.Json.args[0]); buffer.Add(data.Json.args[0].ToString()); }); } void Update() { if (buffer.Count <= 0) return; foreach(var b in buffer) { chatWindow.text += b + "\n"; } buffer.Clear(); } public void SendChat() { SocketManager.Socket.Emit("sMsg", chatText.text); chatText.text = ""; } } | cs |
SocketManager.Socket.On으로 서버로부터 수신한다.
리시브 함수에서 buffer리스트에 전달받은 텍스트를 추가해주고 update에서 리스트의 내용을 UI에 표시해주는 방법을 취하고 있는데,
리시브쪽에서 바로 UI에 표시하려고 하면 오류가 난다.
(쓰레드와 관련된 오류인 것 같다.)
검색해보니 일단 위와같은 방법으로 처리할 수 있다고 해서 쓰긴 했지만...
이 부분에 대해서는 좀 더 공부해봐야 할 것 같다.
6. 서버쪽 코드
1 2 3 4 5 6 7 8 9 | var io = require("socket.io").listen(999); io.sockets.on("connection", function(socket){ console.log("A user connected"); socket.on("sMsg", function(data){ io.sockets.emit("rMsg", data); }); }); | cs |
socket.io 버전은 0.9.6 사용중
7. 실행 결과
다음에는 캐릭터 움직이는 걸 만들어봐야지
'#DevStudy > Unity' 카테고리의 다른 글
Unity <-> php 샘플 코드 (1) | 2016.08.28 |
---|---|
www 클래스 세션 유지 관련 (0) | 2016.07.26 |
유니티와 안드로이드 연동 (0) | 2016.07.21 |
댓글