상세 컨텐츠

본문 제목

[Mirror] #3 유니티로 데이터파일 직렬화/역직렬화

유니티 네트워크

by sorrypark1127 2026. 4. 7. 09:37

본문

이전 글에서 웹서버 -> 유니티로 데이터를 JSON파일로 받아옴

 

JSON의 기본문법

1. "키" : 값 형태

2. 객체는 { }, 리스트는 [ ]

그 외에 뭔가 더 있었던 것 같지만 일단 생략

 

위 JSON파일 구조 분석:

1. 리스트타입

2. 정수형 roomId, 문자열 roomName,문자열 hostAddress, 정수형 currentUserCount

 

이러한 JSON파일을 유니티의 클래스 형태로 반환하려면 역직렬화를 해야함

 

[Serializable]

public class Room{
    public int roomId;
    public string roomName;
    public string hostAddress;
    public int currentUserCount;
}

 

클래스 위에 System.Serializable이 붙으면 직렬화/역직렬화 가능

JSON파일의 구조와 똑같이 구성하면 됨

이러면 {"roomId":3,"roomName":"name" . . . .} 형태로 작성될텐데, 우리가 받아온 JSON은 리스트에 담겨있었음

[ {"roomId":3, "roomName":"name" . . . } , {"roomId":4,"roomName":"name" . . .} ]

 

    [Serializable]
    public class RoomList
    {
        public List<Room> rooms = new List<Room>();

    }

 

 

이렇게 받아온 JSON 파일을 역직렬화하기

  RoomList roomList = JsonUtility.FromJson<RoomList>(json);

 

반대로, 직렬화는 ToJson()  (JSON 파일로)

 

 

웹서버에서 데이터파일을 JSON형태로 받아왔는데, 그렇다고 유니티에서 웹서버로 데이터를 전송할때 이같은 직렬화 방식 외에도 

폼 데이터를 "요청"하는 방식을 사용할 수 있다.

 

private string baseUrl = "http://localhost:8080/MarioGameServer";
IEnumerator CreateRoom()
{
    WWWForm form = new WWWForm();
    form.AddField("roomName", roomNameInputField.text);
    form.AddField("hostAddr", GetHostIP());
    using (UnityWebRequest www = UnityWebRequest.Post(baseUrl + "/createRoom", form)) {
        yield return www.SendWebRequest();
        if (www.result != UnityWebRequest.Result.Success) {
            Debug.LogError("Error: " + www.error);
        } else {
            Debug.Log("Room created successfully");
            Mirror.NetworkManager.singleton.StartHost();
            MyRoom.roomName = roomNameInputField.text;
            MyRoom.hostAddress = GetHostIP();
            SceneManager.LoadScene("Room");
                
        }
    }
}

 

마치 HTML의 <form> 태그안에 정보를 넣어서 전송하는 것과 같은 원리

서블릿은 위 데이터를 파라미터 형태로 받는다.

 

 

미러 네트워크로 방장인 경우 StartHost(), 클라이언트인 경우 StartClient()로 방에 참여할 수 있다.

 public string hostAddr;
 public void JoinRoomBtnPressed()
 {
     if (string.IsNullOrEmpty(hostAddr)) return;
     Mirror.NetworkManager.singleton.networkAddress = hostAddr;
     Mirror.NetworkManager.singleton.StartClient();
     SceneManager.LoadScene("Room");
 }

 

포스트맨으로 방을 여러번 추가한 결과

 

test방 생성한 결과:

 

'유니티 네트워크' 카테고리의 다른 글

[Mirror] #2 유니티 + 웹서버로 DB연동  (0) 2026.04.05
[Mirror] #1 초기세팅  (0) 2026.04.03

관련글 더보기