UnityWebRequest MySQL 教學
Author: Kelvin Huang UnityWebRequest 提供 Unity 遊戲與伺服器進行資料傳輸的功能,包括文字、圖片等。
使用 UnityWebRequest 時需要注意伺服器的支援性,需要進行測試或詢問網站管理員。
從伺服器下載圖片
新增一個 Raw Image 影像物件,遊戲執行時從伺服器下載圖片,可製作經常更新的貼圖。
建立一個 Example.cs 腳本並套用到 Canvas 物件,或是套用到場景中用於管理的物件。

選取此物件,將場景中的 Raw Image 拖曳到 Image 變數欄位,測試遊戲確認是否可顯示設定的圖片。
若有連線問題或是無效的資源,則會顯示由 error 屬性回傳的錯誤訊息。
架設網站伺服器
您可以自行架設伺服器,例如使用免費的 XAMPP 架站套件,安裝後電腦即可變成網站伺服器,
安裝完成後,開啟 Control Panel 控制面板,按下 Start 按鈕,啟用網站伺服器與資料庫。

開啟網頁瀏覽器,輸入網址 http://127.0.0.1/ 確認網站伺服器正常運作。
確認伺服器正常執行後,可將檔案放在 C:\XAMPP\htdocs\ 資料夾,修改 GetTexture 對應的網址。

從伺服器下載文字
將 TXT 文字檔上傳至網站伺服器,遊戲執行時自動下載文字檔內容,並將內容顯示於遊戲畫面。

建立 C# 腳本,程式碼如下:

將此腳本套用到適當的物件,將 Text 拖曳到 Text 變數欄位。

測試遊戲時如果文字出現亂碼,請修改 TXT 文字檔的編碼。

若出現 Generic / unknown HTTP error 可檢查路徑或檔案名稱是否正確。

開發遊戲伺服器
本篇探討使用 UnityWebRequest 開發遊戲伺服器,提供玩家管理、最新消息、儲值系統、排行榜… 等功能。
瀏覽器輸入網址 http://127.0.0.1/phpmyadmin

新增 db_unity 資料庫

此時的資料庫沒有資料表,建立 tb_player 資料表,用於儲存玩家的帳號與密碼。

資料表的欄位

建立資料表後,按下畫面上方的「新增」可新增玩家


剛才新增的玩家資料

撰寫 PlayerRegister.php 網頁,用於接收包含帳號、密碼、暱稱的 URL 參數並儲存到資料庫。
為管理使用 UnityWebRequest 的相關網頁,放在 C:\xampp\htdocs\UnityWebRequest\ 資料夾。

輸入網址測試,例如 http://127.0.0.1/UnityWebRequest/PlayerRegister.php?player_name=Kelvin&player_pass=777&player_nickname=凱文
確認是否正常儲存到 db_unity 資料庫,回到 Unity 製作 PlayerRegister.cs 腳本,用於將玩家輸入的帳號、密碼、暱稱傳送到 PHP 網頁。

使用 Unity UI 製作提供玩家註冊的輸入欄位

將 PlayerRegister 腳本指定給物件並設定文字輸入欄位

如果考量資安的問題,將 PlayerRegister.cs 腳本改用 POST 方式傳送。

因此 UnityWebRequest-PlayerRegister.php 也改為 POST 方式接收

參考資料
UnityWebRequest 官方教學
| Static Properties 靜態屬性 |
說明 |
備註 |
| kHttpVerbCREATE |
字串 "CREATE" 通常用於 HTTP CREATE 請求。 |
|
| kHttpVerbDELETE |
字串 "DELETE" 通常用於 HTTP DELETE 請求。 |
|
| kHttpVerbGET |
字串 "GET" 通常用於 HTTP GET 請求。 |
|
| kHttpVerbHEAD |
字串 "HEAD" 通常用於 HTTP HEAD 請求。 |
|
| kHttpVerbPOST |
字串 "POST" 通常用於 HTTP POST 請求。 |
|
| kHttpVerbPUT |
字串 "PUT" 通常用於 HTTP PUT 請求。 |
|
| |
|
|
| Properties 屬性 |
|
|
| certificateHandler |
擁有對 CertificateHandler 物件的參照,用於對此 UnityWebRequest 的 Certificate 進行驗證。 |
|
| downloadedBytes |
回傳已從遠端伺服器下載的資料量 (Unit:Bytes) |
唯讀 |
| downloadHandler |
Holds a reference to a DownloadHandler object, which manages body data received from the remote server by this UnityWebRequest. |
|
| downloadProgress |
回傳一個介於 0.0 到 1.0 的浮點數,包含從伺服器下載 body 資料的進度 |
唯讀 |
| error |
當 UnityWebRequest 物件處理 HTTP requests 或 responses 遇到系統錯誤時提供容易閱讀的描述 |
唯讀 |
| isDone |
與遠端伺服器的通訊完成時回傳 True |
唯讀 |
| isHttpError |
接收到 HTTP 錯誤代碼時回傳 True |
唯讀 |
| isModifiable |
當 UnityWebRequest 的組態設定可以被 altered 時回傳 True |
唯讀 |
| isNetworkError |
遇到系統錯誤時回傳 True |
唯讀 |
| method |
定義 UnityWebRequest 使用的 HTTP 方法,例如 GET 或 POST |
|
| redirectLimit |
Indicates the number of redirects which this UnityWebRequest will follow before halting with a “Redirect Limit Exceeded” system error. |
|
| responseCode |
伺服器回傳的 HTTP 代碼
例如 200 (OK)、404 (Not Found)、500 ( Internal Server Error ) |
|
| timeout |
設定 UnityWebRequest 在超過逾時的時間後放棄重試 (Unit:Sec) |
|
| uploadedBytes |
回傳已上傳到遠端伺服器的資料量 (Unit:Bytes) |
唯讀 |
| uploadHandler |
保留一個 UploadHandler 參照物件以管理上傳到遠端伺服器的 Body 資料。 |
|
| uploadProgress |
回傳介於 0.0 到 1.0 的浮點數值,顯示資料上傳伺服器的進度。 |
|
| uri |
定義與 UnityWebRequest 進行連線的 URI 。 |
|
| url |
定義與 UnityWebRequest 進行連線的 URL 。 |
|
| useHttpContinue |
Determines whether this UnityWebRequest will include Expect: 100-Continue in its outgoing request headers. (Default: true). |
|
| |
|
|
| Constructors |
|
|
| UnityWebRequest |
建立一個 UnityWebRequest 包含預設選項,不含 DownloadHandler 或 UploadHandler,預設使用的方法為 GET 。 |
|
UnityWebRequest+JSON
|