728x90
반응형
Unity에서 Unity WebRequest를 사용해 Http 통신하여 웹 서버에서 데이터를 요청할 수 있다. 사용 하기전 using UnityEngine.Networking를 꼭 써주어야 한다.
데이터를 크롤링할때 json 형태나 html 형태로 크롤링 하는데 json이면 Newtonsoft 라이브러리를 사용해서 파싱, html은 Package Html Agility Pack 라이브러리를 사용해서 파싱한다. NuGet에서 다운 받을수 있다.
public void LoadJson(string url, string folderName, string dataName) => StartCoroutine(LoadJsonFile(url, folderName, dataName));
IEnumerator LoadJsonFile(string url, string folderName, string dataName)
{
UnityWebRequest request = UnityWebRequest.Get(url);
yield return request.SendWebRequest();
string dataAsJson = request.downloadHandler.text.ToString();
if (request.isDone && request.error == null)
{
UIManager.Instance.LoadJsonForAndroid(dataAsJson);
}
else
{
UIManager.Instance.errorPopup.SetMessage("통신 오류 또는 해당 스테이지는 존재하지 않습니다.");
}
request.Dispose();
}
이런식으로 서버에 요청하면 데이터를 받을 수 있다. 해당 url이 없거나 권한이 없으면 통신이 실패한다. (404, 403에러) Get과 Post가 있는데 Get은 서버에 그냥 데이터를 요청하는 방식이고, Post는 WWW Form을 사용해 필요한 데이터를 입력해 데이터를 요청한다.
WebRequest를 사용하면 Dispose를 꼭 해주자 관리되지 않는 리소스는 .NET의 가비지 컬렉션이 자동으로 관리해주지 않아서 명시적으로 Dispose를 호출하여 해당 리소스를 해제하지 않으면 리소스 누출이 발생할 수 있다!
나는 회사에서 Unity WebRequest의 Post를 자주 사용하는데
public delegate void NetworkResultCallback(string result);
public void StartNetworking(bool networkingCheck, string url,
List<IMultipartFormSection> form, NetworkResultCallback networkResultCallback)
{
if (Application.internetReachability == NetworkReachability.NotReachable &&
networkingCheck)
{
UIManager.Instance.errorPopup.SetMessage("통신시작 과정에서 통신 실패.");
}
else
{
StartCoroutine(PostNetworking(url, form, networkResultCallback));
}
}
IEnumerator PostNetworking(string url, List<IMultipartFormSection> form,
NetworkResultCallback networkResultCallback)
{
UnityWebRequest webRequest = UnityWebRequest.Post(_serverURL + url, form);
webRequest.SetRequestHeader("Accept", "application/json");
yield return webRequest.SendWebRequest();
if (webRequest.error != null)
{
UIManager.Instance.errorPopup.SetMessage("보내는 과정에서 통신 실패.");
}
else
{
networkResultCallback?.Invoke(webRequest.downloadHandler.text);
}
webRequest.Dispose();
}
이런식으로 IMultipartFormSection 리스트를 통해 파라미터 정보를 보낸다음에 데이터를 요청한다.
728x90
반응형
'C# > Unity' 카테고리의 다른 글
[Unity C#] 형변환 속도에 대해서 (int.Parse, ToString()) (2) | 2023.11.25 |
---|---|
[Unity C#] 기술 면접 대비 중급 질문들 (1) | 2023.11.14 |
[Unity C#] 기술 면접 대비 기본 질문들 (0) | 2023.11.14 |
[Unity C#] foreach GC에 대하여 (0) | 2023.11.13 |
[Unity C#] FillAmount 끝자리 위치 알기 (0) | 2023.09.18 |