線程:Thread
// 新線程-1 調用靜態(tài)方法
Thread m_Thread_1 = new Thread(M_Thread.StartThreadFunc);
m_Thread_1.Start();// 開始執(zhí)行新線程
// 新線程-2 調用實例方法
Thread m_Thread_2 = new Thread(new M_Thread().OtherThreadFunc);
m_Thread_2.Start();
// 以下2中方法 處理 比較簡單內容的多線程
// 匿名方法
Thread m_Thread_3 = new Thread(delegate () { Debug.Log("新線程-3 匿名函數 開始執(zhí)行"); });
m_Thread_3.Start();
// Lambda表達式
Thread m_Thread_4 = new Thread(() => { Debug.Log("新線程-4 Lambda 開始執(zhí)行"); });
m_Thread_4.Start();
協(xié)程:
Unity的協(xié)程系統(tǒng)是基于C#的一個簡單而強大的接口劳跃,協(xié)程就是可以把一個方法拆分成多次執(zhí)行的一種接口
簡單使用
IEnumerator SomeCoroutineFunc() {
Debug.Log("協(xié)程-1");
// yield 關鍵字 遇到y(tǒng)ield的時候 協(xié)程方法將交出執(zhí)行權
// yield return 0;// 延遲返回1幀? 執(zhí)行本函數外面的代碼 yield return null 等同與yield return 0;
// 等待約定的時間 等待5秒
yield return new WaitForSeconds(5f);// 5秒后拿回執(zhí)行權
// 本幀結束后繼續(xù)
// yield return new WaitForEndOfFrame();?
如果不是截屏或相關的操作沙庐,就沒必要用WaitForEndOfFrame?反之攘乒,抓取屏幕信息時則會報錯
所以延遲一幀要用yield return null,減少GC開銷
Debug.Log("約定時間過后 協(xié)程繼續(xù)執(zhí)行 沒想到吧 我又回來了!");
}
調用方法-1
StartCoroutine(SomeCoroutineFunc());
調用方法-2?
?StartCoroutine("SomeCoroutineFunc");
停止協(xié)程 調用的地方 邏輯處理完畢后調用
StopCoroutine("SomeCoroutineFunc"); 僅僅能停止使用調用 字符串方式 開啟的協(xié)程
如果想停止帶幾個參數的協(xié)程 必須先將這個協(xié)程方法用Coroutine接收一下 再去停止
Coroutine a = StartCoroutine(SomeCoroutineFunc());
StopCoroutine(a);
一些注意事項:
WaitfForSecond 是受到Time,timeScale影響的,如果將其設置為0,那么協(xié)程就無法執(zhí)行下去了漾岳。
不過yield return null不會受到影響,因為每幀會執(zhí)行粉寞,只是Time.deltaTime為0了尼荆。
網上的博客。
WWW
換圖片例子:
string url = "http://wx2.sinaimg.cn/thumb300/714a59a7ly1ff0abbyb9cj21400qo10g.jpg";? ??
RawImage _rawImage;? ??
IEnumerator ShowTexture() {? ? ? ?
?WWW www = new WWW(url);? ? ? ?
?yield return www;// 等待這個加載完成 在執(zhí)行下一步? ? ? ?
?_rawImage = transform.GetComponent();
_rawImage.texture = www.texture;
}
WWW 常用屬性:
texture 下載到的圖片
audioClip 下載到的音頻
movie 下載到的視頻
bytes 下載到的比特數組
text 下載到的文字
isDone 下載是否完畢
progress 當前下載進度
url 下載地址