如何快速建立一個測試資源Web服務器及異步獲取資源(Unity3D)


背景

1、最近看了幾位專欄作家的文章,幾篇提到了資源通過網絡的動態獲取。如何建立一個快速的測試環境,不免是一個問題,也就最簡單的就是假設http服務器了,微軟系的當然首選的IIS了,別的也能用阿帕奇或者Tomcat了,net平台更輕量級的技術也有比如HttpListener或者Nancy都可以,雖然對於本人來說,創建IIS或者動手寫一個輕量級的不是什么難事。但是在win10或者win8上裝一個IIS擴展或者自己寫一個小的服務器還是比較煩躁(反正我是不太喜歡在個人電腦上裝服務類程序,你呢?),我想大家也一定有同樣的選擇問題,這里其實有更簡單的選擇。

2、可能地球人都知道Unity其實不是很推薦使用多線程,當然異步調用還是很有必要的,比如本文說的獲取IO資源這樣比較耗時的操作,所以最近也研究了一些大家分享的多線程的文章,看了一圈覺得讓人滿意的不多,知識點較多,封裝的較少,比較初級,這里拍磚引玉,簡單引入一把牛刀,亮亮眼。

實現

1、這里不賣關子了,如何建設一個就簡單的Web服務器作為網絡資源的測試服務器,這里我采用的方法是采用一個綠色微型的Web服務器,叫做MyWebServer,而且是綠色的無須安裝,解壓后是這個樣子

1

這里其實我們看到asp.dll ,asp.net.dll,php等文件其實它不光能模擬靜態資源的獲取,動態資源其實也是可以得比如Json什么的,不過不是本篇想講的內容,如果想了解自己看看程序幫助文檔即可。

雙擊MyWebServer.exe運行即可,會啟動左下的小窗口,這里可以定義服務目錄和高級設置,這里如果就是本機測試使用就不用點擊高級設置了,其實也用不着

2

我們進入web文件夾,也就是服務目錄(或者叫虛擬目錄,就是想在web服務器上陳列的文件內容)

4

這里我給Web目錄中添加了一張圖片,用來在Unity中動態獲取,這里分別用圖片和a.asp來測試下,在瀏覽器中通過本機IP進行測試如下圖都成功了,至此一個綠色的版本的本地網絡資源測試服務器建立完畢了,是不是很簡單。

5

3

2、如何通過Unity異步獲得網絡圖片資源,這里不使用系統協程來實現,而是用UniRx異步調用實現

using UnityEngine;
using UniRx;

public class BackgroundLoad : MonoBehaviour {

    // Use this for initialization
    void Start () {
        ObservableWWW.GetWWW("http://127.0.0.1/Map2.jpg").Subscribe(www =>
        {
            if (string.IsNullOrEmpty(www.error))
            {
                Texture2D texture = www.texture;
                SpriteRenderer render = this.GetComponent<SpriteRenderer>();
                render.sprite = Sprite.Create(texture, new Rect(0, 0, texture.width, texture.height), new Vector2(0.5f, 0.5f));
            }
        });
    }  

}

這里我懷疑Unity原生的WWW類應該是異步的,只是通過協程輪詢的方式效率不高而已。關於UniRx的知識可以另行學習或者參考我的這篇文章Unity基於響應式編程(Reactive programming)入門


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM