天天看點

Unity如何使用WWW類和協程完成圖檔、視訊下載下傳播放(一)

Unity如何使用WWW類和協程完成圖檔、視訊下載下傳播放(一)

今天講解一下如何使用WWW類和協程完成簡單的圖檔和視訊下載下傳播放功能。

一、WWW類

WWW是一個Unity開發中非常常用到的工具類,主要提供一般Http通路的功能,以及動态從網上下載下傳圖檔、聲音、視訊、Unity資源等。

注意:iPhone支援http://, https://和 file://協定;ftp://協定的支援僅限于匿名下載下傳。其他協定不被支援。

當在windows和Windows Store Apps使用檔案協定來通路本地檔案,需要使用file:///(帶有三個斜線)。

WWW類的主要常用屬性有:

Unity如何使用WWW類和協程完成圖檔、視訊下載下傳播放(一)
Unity如何使用WWW類和協程完成圖檔、視訊下載下傳播放(一)
Unity如何使用WWW類和協程完成圖檔、視訊下載下傳播放(一)

www類加載圖檔的官方的示例代碼如下:

using UnityEngine;

using System.Collections;

public class ExampleClass: MonoBehaviour{

    public string url= "http://images.earthcam.com/ec_metros/ourcams/fridays.jpg";

    IEnumerator Start() {

        WWW www = new WWW(url);

        yield return www;

        renderer.material.mainTexture = www.texture;

    }

}

二、協程

1、什麼是協程?

       協程是一個分部執行,遇到條件(yield return 語句)會挂起,直到條件滿足才會被喚醒繼續執行後面的代碼。

        Unity在每一幀都會去處理對象上的協程。Unity主要是在Update後去處理協程(檢查協程的條件是否滿足)。協程跟Update()其實一樣的,都是Unity每幀都會去處理的函數。如果在一個對象的前期調用協程,協程會立即運作到第一個 yield return 語句處,如果是 yield return null ,就會在同一幀再次被喚醒。       

2、協程的寫法

       Unity的協程系統是基于C#的一個簡單而強大的接口 ,IEnumerator,它允許你為自己的集合類型編寫枚舉器。也就是一個 IEnumerator 傳回值,一個

yield return null的語句。

   IEnumerator SayHi() 

{

          //協程中必須有傳回值 yield return

yield return null;

}

   //帶參數的:

   IEnumeratorSayHello(string name){

print (name);

yield return null;

}

3.*協程中的細節*

1.協程與普通方法一樣,可以被多次調用, 

2.協程一旦被開啟之後,總是試圖将方法中的代碼執行完,之後停止。

3.在協程内,如果遇到yield return null ,0 , 1 ...;表示剩餘代碼将在下一幀繼續執行,

4.在協程中遇到 yield return new WaitForSeconds (n);代碼;表示剩餘代碼将在 n秒之後執行。 

  5.在協程中如果遇到 yield return StartCoroutine (Son ()), 表示剩餘代碼将在子協程執行完成之後繼續執行。子協程仍然滿足協程基本規則。

6.在協程中如果遇到 yield return new WaitForFixedUpdate (), 表示剩餘代碼将在FixedUpdate執行完畢之後繼續向下執行。

7. 在協程中如果遇到 yield return new WaitForEndOfFrame (), 表示剩餘代碼将在ONGUI執行完畢之後繼續向下執行。

8.在協程中如果遇到 yield return WWW,表示剩餘代碼将在 www下載下傳檔案之後繼續向下執行。

9.在協程中如果遇到  yield return obj ,表示剩餘代碼将在obj部位空的時候繼續向下執行。

 10.在協程中如果遇到  yield return new WaitForSeconds (n) ,會受到Time.timeScale的影響。

 11.協程方法,可以當做普通方法,在兩個腳本之間自由調用。 

 12.生命周期内的方法,也可以改造成協程方法。

4、啟動協程的寫法。

       //3.1 啟動協程

StartCoroutine(SayHi());

//3.2 方法名開啟

StartCoroutine("SayHi");

//3.3 啟動帶參數的協程

StartCoroutine(SayHello("hello"));

StartCoroutine ("SayHello","你好");

        //關閉協程 ,注意隻能通過字元串去關閉一個協程。

StopCoroutine("SayHi");

代碼示例:利用一個協程和www類實作簡單的圖檔下載下傳展示:

1.在unity中搭建好一個場景需要一個RawImage。

      2.建立一個腳本,完成以下代碼:

        //  1) 定義一個RawImage用于展示圖檔

RawImage l_rawImage;

//  2) 圖檔的網址

string imgUrl;

  void Start ()

{

// 代碼擷取我們的RawImage

l_rawImage =

     GameObject.Find("RawImage").GetComponent<RawImage> ();

// 網址指派

imgUrl = "http://g.hiphotos.baidu.com/image/h%3D360/sign" +

      "=07ad353ef403738dc14a0a24831ab073/08f790529822720eb2"           +"5fa86479cb0a46f31fab9f.jpg";

// 開啟下載下傳圖檔的協程。

StartCoroutine (LoadImage ());

}

// 實作加載協程的方法

IEnumerator LoadImage()

{

// 根據連接配接下載下傳

WWW www =new WWW (imgUrl);

// 等待WWW代碼執行完畢之後後面的代碼才會執行。

yield return www;

// 将下載下傳的textrue在RawImage上展示

l_rawImage.texture = www.texture;

}

以上代碼就能實作一個簡單的圖檔下載下傳和展示的功能了。

歡迎到CSDN學院觀看我的Unity3D開發視訊教程:http://edu.csdn.NET/lecturer/lecturer_detail?lecturer_id=107

(以上版權歸藍歐科技有限公司所有,任何機關或者個人不可以私自轉載,如果有需有,請于藍歐科技有限公司相關部門聯系)

繼續閱讀