Unity/Project : Cursed Treasure
팀프 21.07.19. Unity - Node 웹서버 연동
HappyFrog
2021. 7. 19. 23:21
Unity와 Node서버를 간단히 연동을 해 볼것이다.
Node서버와 DB연동 구현은 여기를 확인하자.
Unity에는 UnityWebRequest라는 웹과 데이터를 주고받을 수 있게 해주는 클래스가 존재한다.
- 웹 리퀘스터를 코루틴으로 이용한다. => 데이터를 불러오기 전에 유니티에서 처리해버릴 수도 있으므로
- 데이터를 가져오며 웹과 연결될 때까지 기다리다가 결과가 나왔다면 에러처리를 해준다.
- 연결이 되었다면 해당 웹의 데이터를 JSON형식으로 가져올 수 있다.
- 해당 데이터를 역직렬화 하기 위해서 데이터 클래스를 만들어준 뒤 데이터들의 타입을 선언해주었다.
- 그리고 역직렬화를 시킨 뒤 해당 데이터들을 UI에 할당해준다.
- 나는 해당 기능을 버튼으로 사용했다.
- 버튼을 누르면 내가 지정한 url의 데이터를 받아오는 방식이다.
- node서버를 실행시켜두고 실행해보자.
잘 불러와진다.
- 그리고 URL에서 "localhost:3030/users?id=1"이런 식으로 Get을 할 때 id를 매개변수로 주어 원하는 id를 검색하게끔 만들고 싶었다.
- 그래서 해당 주소에 접속하면서 로그를 찍어보았다.
- 해당 URL의 매개변수는 request의 query로 받을 수 있다.
또 다른 방법이 있다.
- 위와 같이 NodeURL을 설정하면 "localhost:3030/users2432"이런 식으로 받아올 수있다.
- 해당 방법은 req.params로 받을 수 있다.
전체 코드
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;
using Newtonsoft.Json;
public class UserData
{
public int id;
public string nickname;
}
public class App : MonoBehaviour
{
public UIData uiData;
[SerializeField]
string url;
void Start()
{
uiData.btnGet.onClick.AddListener(() =>
{
StartCoroutine(GetText(this.url));
});
}
IEnumerator GetText(string url)
{
UnityWebRequest www = UnityWebRequest.Get(url);
yield return www.SendWebRequest();
if(www.isNetworkError || www.isHttpError)
{
Debug.Log(www.error);
}
else
{
Debug.Log(www.downloadHandler.text);
string webData = www.downloadHandler.text;
var json = JsonConvert.DeserializeObject<UserData>(webData);
uiData.Init((int)json.id, json.nickname);
}
}
}