UnityWebRequest提供了一套標准的系統模塊,來完成Http請求和Http響應,它的基本目標就是滿足unity游戲與web后端服務的交互。它另外還支持一些http高級的功能,比如chunked http請求。(數據分塊傳輸),流式 POST/PUT操作,以及操作Http包頭和其它的http行為,比如delete,get等。
UnityWebRequest主要有兩部分組成:
- 高級API(HLAPI High Level API): 它封裝了低級API的接口,提供的接口,使用起來更加友好和方便。
- 低級API(LLAPI Low Level API) : 它為高級使用者提供了最大程度的靈活性。
UnityWebRequest支持的平台:
- 所有的Unity Editor平台和所有的獨立運行的應用
- WebGL
- 移動平台:IOS,Android
- 通用的Window平台
- PS4和PSVita
- XboxOne
- Nintendo Switch
UnityWebRequest 系統的結構
它將一個Http請求的事務分解成了三個不同的操作:
- 向服務端提供數據
- 從服務端獲取數據
- Http流控制(比如重定向,錯誤捕獲等)
為了向高級用戶提供友好方便的接口支持,這些操作被封裝到各自所屬的對象里面:
- UploadHandler 負責向服務端發送數據
- DownloadHandler 負責接收,緩存和處理從服務器接收的數據
- UnityWebRequest 負責管理其它的兩個對象,並且實現Http流的控制操作。在這個對象中,可以自定義Headers信息,URLs,以及存儲錯誤和重定向信息。
如下圖所示:
使用UnityWebRequest,對於任何一個Http請求事務,通常的代碼流程是這樣的:
- 創建一個Web請求對象
- 配置Web請求對象:設置自定義的Headers,設置Http行為比如GET,POST,HEADER (注意,自定義行為除了安卓平台,其它平台都支持),然后設置請求的URL。
- (操作)創建一個Upload Handler 並且和Web Request綁定:提供請求的參數數據,或者提供要提交的表單數據
- (操作)創建一個Download Handler並且和Web Request綁定
- 發送Web Request,如果是在一個協程中,你需要yield Send()方法的結果,然后等待請求的完成
- (操作)讀取從Download Handler中接收的數據
- (操作)從UnityWebRequest對象中讀取錯誤信息,Http狀態碼以及響應的包頭信息。