Networking and I/O (네트워킹 & 입출력)
1. 아키텍처 개요
•
Component-Helper 구조
→ Unity 컴포넌트가 매니저 기능을 노출, 실제 구현은 Helper 클래스가 담당
•
주요 구성:
◦
NetworkComponent : 네트워크 채널 관리 (TCP/UDP)
◦
DownloadComponent : 파일 다운로드 관리
◦
WebRequestComponent : HTTP/HTTPS 요청 처리
◦
ResourceHelper : 원격/로컬 리소스 로드
◦
FileSystem : 파일 읽기/쓰기
2. Network System
•
특징
◦
TCP/UDP 소켓 통신
◦
다중 채널(NetworkChannel) 구조
◦
하트비트(heartbeat) 내장
◦
패킷 직렬화/역직렬화 가능
◦
연결 상태 및 에러 이벤트 지원
•
핵심 API
◦
CreateNetworkChannel(name, serviceType, helper)
◦
GetNetworkChannel(name)
◦
DestroyNetworkChannel(name)
•
이벤트
◦
NetworkConnected
◦
NetworkClosed
◦
NetworkMissHeartBeat
◦
NetworkError
•
디버깅
◦
NetworkComponentInspector : 연결 상태, 송수신 패킷 수, 하트비트 상태 표시
3. Download System
•
특징
◦
파일 다운로드 (전체, 부분, 범위 지정 지원)
◦
진행 상황 & 오류 이벤트 제공
•
Agent Helpers
◦
UnityWebRequestDownloadAgentHelper (최신 Unity API)
◦
WWWDownloadAgentHelper (레거시 지원)
•
주요 이벤트
◦
UpdateBytes, UpdateLength, Complete, Error
4. Web Request System
•
특징
◦
GET, POST 지원
◦
JSON, FormData, RawData 전송 가능
◦
이벤트 기반 완료/에러 처리
•
구현체
◦
UnityWebRequestAgentHelper
5. Resource Loading with Network I/O
•
DefaultLoadResourceAgentHelper
◦
AssetBundle 로드 (로컬/원격)
◦
바이트 스트림 처리
◦
에셋 추출
•
DefaultResourceHelper
◦
URL에서 바이트 읽기
◦
씬 언로드, 리소스 해제 기능 포함
6. File System
•
기능
◦
파일 읽기/쓰기
◦
디렉토리 관리
◦
커스텀 파일 시스템 확장 가능
•
통합
◦
리소스 시스템과 연결
◦
데이터 테이블 로딩 가능
7. 프레임워크 통합
•
Resource System : 원격 에셋 다운로드 활용
•
Event System : 모든 네트워크/IO 결과를 이벤트로 발행
•
Data Tables : 원격 데이터 테이블 로드 가능
8. 코드 예시
var networkComponent = GameEntry.GetComponent<NetworkComponent>();
var channel = networkComponent.CreateNetworkChannel("GameServer", ServiceType.Tcp, new GameNetworkChannelHelper());
channel.Connect(IPAddress.Parse("192.168.1.1"), 8888);
channel.Send(gamePacket);
channel.Close();
C#
복사
var downloadComponent = GameEntry.GetComponent<DownloadComponent>();
int id = downloadComponent.AddDownload("https://example.com/assets/bundle.unity3d", "Assets/Download/bundle.unity3d");
downloadComponent.DownloadSuccess += (s, e) => {
if (e.SerialId == id) Debug.Log("Download completed: " + e.DownloadPath);
};
C#
복사
var webRequestComponent = GameEntry.GetComponent<WebRequestComponent>();
WWWForm form = new WWWForm();
form.AddField("username", "player");
form.AddField("score", 100);
int id = webRequestComponent.AddWebRequest("https://example.com/api/scores", form);
webRequestComponent.WebRequestSuccess += (s, e) => {
if (e.SerialId == id) {
string response = Utility.Converter.GetString(e.WebResponseBytes);
Debug.Log("Response: " + response);
}
};
C#
복사
•
네트워크 (TCP/UDP) : 채널 기반 소켓 통신
•
다운로드 : 파일 전송 및 범위 요청
•
웹 요청 : GET/POST API 호출
•
리소스 시스템 : AssetBundle + 네트워크 연동
•
파일 시스템 : 기본 파일 I/O + 커스텀 확장