🐊 Unity 프로젝트 구성
- Unity Hub에서 새 프로젝트를 생성합니다. 이름은 예시로
WebTest로 설정합니다.
WebManager.cs 스크립트를 생성하고, 빈 GameObject를 만들어 이름을 WebManager로 지정 후 스크립트를 붙입니다.
🧱 기본 구조 만들기
using System.Collections;
using UnityEngine;
public class WebManager : MonoBehaviour
{
string _baseUrl = "http://localhost:44360";
void Start()
{
}
IEnumerator CoSendWebRequest(string url, string method, object obj)
{
yield return null;
}
}
baseUrl: WebAPI 주소. 포트 번호는 WebAPI의 launchSettings.json에서 확인 가능.
CoSendWebRequest: REST 메서드, URL, 객체를 전달받아 통신하는 코루틴.
🎮 GameResult 클래스 생성
public class GameResult
{
public string UserName;
public int Score;
}
- WebAPI와 동일한 구조로 맞춰야 정상적으로 Serialize/Deserialize 가능.
🧪 Start에서 테스트 데이터 전송
void Start()
{
GameResult res = new GameResult()
{
UserName = "Shung",
Score = 555
};
StartCoroutine(CoSendWebRequest("ranking", "POST", res));
}
🧬 JSON 직렬화 및 요청 구성
IEnumerator CoSendWebRequest(string url, string method, object obj)
{
string sendUrl = $"{_baseUrl}/{url}";
byte[] jsonBytes = null;
if (obj != null)
{
string json = JsonUtility.ToJson(obj);
jsonBytes = System.Text.Encoding.UTF8.GetBytes(json);
}
var uwr = new UnityWebRequest(sendUrl, method);
uwr.uploadHandler = new UploadHandlerRaw(jsonBytes);
uwr.downloadHandler = new DownloadHandlerBuffer();
uwr.SetRequestHeader("Content-Type", "application/json");
yield return uwr.SendWebRequest();
}
✅ 설명
JsonUtility.ToJson: Unity 전용 JSON 직렬화 메서드.
UploadHandlerRaw: POST 시 데이터 전송에 사용.
DownloadHandlerBuffer: 응답 수신 처리.
SetRequestHeader: JSON 포맷임을 서버에 명시.
🚨 예외 처리 및 콜백
IEnumerator CoSendWebRequest(string url, string method, object obj, Action<UnityWebRequest> callback)
{
yield return uwr.SendWebRequest();
if (uwr.isNetworkError || uwr.isHttpError)
{
Debug.Log(uwr.error);
}
else
{
Debug.Log(uwr.downloadHandler.text);
callback?.Invoke(uwr);
}
}
uwr.error: 네트워크 혹은 HTTP 오류 메시지 출력.
callback.Invoke: 성공 후 응답 활용 가능.
🎯 요청 함수 분리
public void SendPostRequest(string url, object obj, Action<UnityWebRequest> callback)
{
StartCoroutine(CoSendWebRequest(url, "POST", obj, callback));
}
public void SendGetAllRequest(string url, Action<UnityWebRequest> callback)
{
StartCoroutine(CoSendWebRequest(url, "GET", null, callback));
}
- POST, GET 요청을 메서드로 추출하여 재사용성 향상.
✨ 최종 Start 예시
void Start()
{
GameResult res = new GameResult()
{
UserName = "Shung",
Score = 555
};
SendPostRequest("ranking", res, (uwr) =>
{
Debug.Log("POST 완료 후 처리");
});
SendGetAllRequest("ranking", (uwr) =>
{
Debug.Log("모든 게임 결과 가져옴");
});
}
📌 테스트 방법
- Visual Studio에서 WebApi 서버를 먼저 실행합니다.
- Unity Editor에서 Play 버튼 클릭 시
POST 요청 → 게임 결과 전송.
- 이어서
GET 요청으로 전체 랭킹을 조회.
- Unity 콘솔에 JSON 형태의 응답 데이터가 출력됩니다.
❓ REST를 꼭 지켜야 하나?
- REST는 비공식적인 "표준 방식"일 뿐, 꼭 엄격히 따를 필요는 없습니다.
- Unity에서는 상황에 따라 POST만 활용하거나, GET/POST를 유동적으로 처리하는 것도 실용적인 선택입니다.