[Unity] 유니티에서 socket.io 사용하기

Jenna·2023년 4월 27일
0

기본 세팅

서버는 기본적으로 node.js 서버 사용

직접 설치해도 되지만 에셋스토어에서 구매하면 빠르기 때문에 에셋스토어에서 구매해서 import 해서 사용함

https://assetstore.unity.com/packages/tools/network/socket-io-v2-client-for-unity-standalone-webgl-186263

socket.io 검색했을 때 나오는 두번째 버전으로 받았다.
예전에는 무료버전도 있었던거 같은데,,,

어쨌든 unity 켜서 window → package manager 열어서 import 해준다.
설치된 파일 중 SocketIOCommunicator 의 함수들을 사용할거다.

서버와 연결하는 스크립드에 다음과 같이 작성해준다

using Firesplash.UnityAssets.SocketIO;

public SocketIOCommunicator sioCom;

// 게임 실행 할 때 서버 연결
private void Start()
{
	sioCom = GetComponent<SocketIOCommunicator>();
	initSocket();
}

sioCom은 socketIOCommunicator를 줄인걸로 원하는대로 설정해주면 된다.

initSocket() 함수는 다음과 같이 작성

void initSocket()
{
	sioCom.Instance.Connect();

	//연결
	sioCom.Instance.On("connect", (string jsondata) =>
	{
		Debug.Log("== Connected ============");
	});
}

sioCom.Instance.Connect(); 함수를 사용해 서버랑 연결해줌


연결하는 서버의 주소는

다음과 같이 서버 오브젝트에 (Server Manager 등) Socket IO Communicator 스크립트를 넣어 Address 부분에 서버 주소를 넣어주면 된다.

밑의 체크박스는 보안연결(HTTPS) 하는 경우와 시작할 때 오토 커넥션을 원하는 경우에 맞춰서 체크해주면 된다.


JSON 데이터 사용

서버와 주고 받는 데이터는 JSON 데이터의 형식으로 사용할 것이다.

나같은 경우에는 직접 라이브러리를 받아서 사용했지만
https://github.com/mtschoen/JSONObject
(JSON은 라이브러리가 워낙 많아서)

asset store에 검색해도 많이 나오기 때문에 원하는 것으로 다운받아서 적용하면 될 듯 하다.


기본적으로 JSONObject data 만드는 법

JSONObject data = new JSONObject(JSONObject.Type.OBJECT);
data.AddField("room_id", room_id);

이런식으로 데이터를 만들고 원하는 데이터를 추가해주면 된다.

AddField()의 경우 같은 역할을 하는 함수가 다를 수 있으니 라이브러리 참고해서 데이터 추가해주면 된다.
앞의 data 생성부분도 기본 포멧인 JSONObject data = new JSONObject(); 는 같겠지만 파라미터에 아무것도 안 들어 갈 수도 있고 지금처럼 형식이 지정될 수도 있음.
참고로 Object 형식 뿐만 아니라 Array와 같은 형식도 있음.


신호(데이터) 전송

서버상의 데이터 주고받는 함수들은 위에서 만들어 놓았던 initSocket() 안에서 호출하면 된다.

데이터를 서버에 전송하고 싶은 경우에는

JSONObject data = new JSONObject(JSONObject.Type.OBJECT);
data.AddField("id", id);
data.AddField("password", password);
sioCom.Instance.Emit("CheckLogin", data.Print());

이런식으로 JSON 데이터 만들어서 신호 + 데이터의 형식으로 보내주면 된다.
신호를 보내는 함수는 Emit() 함수 사용
Emit()안의 인자로 신호랑 데이터를 넣어주면 서버로 전송됨

데이터 없이 신호만 보내는 것도 가능하다.


신호(데이터) 수신

서버가 보내는 신호랑 데이터를 받아오려면

sioCom.Instance.On("CheckLogin", (string jsonData) =>
{
	JSONObject data = new JSONObject(jsonData);
	if (data.GetField("success").b)
	{
		GoToPage("2_SelectChannel");
	}
});

이런식으로 On() 함수를 사용해서 받아오는 신호, 데이터를 가져오면 된다.

profile
FE/Game Dev.

0개의 댓글