네트워킹 2
유니티와 Network 관련 Library
- WWW, (사장됨)
- UntiyWebRequet : CRUD관련 처리는 UnityWebRequest로 처리
기본적인 사용 방식은
var response = UnityWebRequest.Get(url);
response.SetRequestHeader(name, value);
response.SendWebRequest();
var data = response.downloadHandler.text;
데이터들을 역질렬화 하는 방식으로 사용
- UnityWebRequetTextur : 이미지를 받아 올 때 사용
- UnityWebRequestMultimedia : 영상이나 오디오를 받아 올 때 사용
- async(Asynchronous : 비동기식), await(작업을 기다린다) : AsyncOperation 비동기식 작업
비동기식 작업? 동기식(작업을 순차적으로 실행하는 것)과 다르게 여러작업들을 동시에 실행하는 방식 동기식 작업의 경우 코드를 구현하기 쉽고 실행 순서를 빠르게 파악할 수 있으나 하나의 함수에서 엄청난 자원을 소모한다면 위험해진다.
요청을 하고 응답이 오기까지 대기중에 현재 진행 사항에 대한 정보를 담고 있는 라이브러리 예를들면 UnityWebRequest.SendRequest()에는 UnityWebRequestAsyncOperation타입을 리턴 isDone이 될 때까지 기다려야한다.
public async Task AsyncText()
이런식으로 선언하고 사용 Task는 작업의 단위를 반환해준다.
- Corouinte
Yiel Return을 통해 대기를 걸수 있음 new 대기 방식 외에도 AsyncOperation을 대기하는 기능도 포함되어 있어 SendRequest작업이 종료될 때 까지 비동기 처리가 가능하다.
IEnumerator를 사용하기 때문에 delegate를 사용해 콜백 형태로 작업
객체지향 네트워킹
- 각 api호출을 해당 클래스를 통해서 처리
- 네트워크를 담당하는 매니저와 매니저를 통해 처리하는 기능을 갖는 부모클래스를 상속받아 네트워킹 하는 방식을 고안
- Reflection을 활용하여 직접 값을 대입하는 방식보다 조금 무겁지만 구조를 잡아두면 이후로는 클래스 추가만으로 새로 추가되는 통신에 대응할 수 있다.
(Reflection : 프로그래밍에서의 리플렉션은 프로그램이 자신의 모습을 보고 심지어 수정하는 것을 의미한다. Java API에서 이를 제공)
- attribute를 활용하여 코드상에 지저분한 부분을 제거
- 직렬화 역직렬화까지 하나의 스크립트에서 전부 구조를 잡고 그대로 사용할 수 있어야함.
오늘의 회고
- 오늘 특강에서 프레임워크 만드는 다양한 로직들을 알려주셨다 주말동안 정리해서 월요일부터 개발 시작할 준비를 마쳐야겠다.
- 스팀펑크적 요소를 섞어서 하려니 생각보다 복잡한느낌 우리게임만의 차별성을 넣기위해 잘 정리해야겠다. 이것역시 주말에 놀지만 말고 깔끔한 기획안을 만들어야겠다.
- 다음주 월요일부터 본격적으로 개발하는날 목,금은 기획회의랑 컨셉회의 진행해서 쉬었으니 다음주부터 본격적으로 달려야겠다.