




已閱讀5頁,還剩3頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
Unity3D游戲開發(fā)之異步加載 -游戲場景游戲資源進(jìn)度條 異步任務(wù)相信大家應(yīng)該不會陌生那么本章內(nèi)容將帶領(lǐng)大家學(xué)習(xí)Unity中的一些異步任務(wù)。在同步加載游戲場景的時候通常會使用方法 Application.LoadLevel(“yourScene”); 這句代碼執(zhí)行完畢后程序會干什么呢如下圖所示這是我隨便找了一個游戲場景 在Hierarchy視圖中我們可以看到該場景中“天生”的所有游戲?qū)ο蟆?天生的意思就是運行程序前該場景中就已經(jīng)存在的所有游戲?qū)ο?。然后這些對象就會在執(zhí)行完 Application.LoadLevel(“yourScene”);方法后加載至內(nèi)存當(dāng)中。如果該場景中的游戲?qū)ο筮^多那么瞬間將會出現(xiàn)卡一下的情 況因為LoadLevel()方法是同步進(jìn)行的。把這種加載起個名字叫A形式加載。 下面我說說“后天“加載的游戲?qū)ο蟆R馑际沁@些游戲?qū)ο笫峭ㄟ^腳本動態(tài)的創(chuàng)建出來的。比如常用方法 : GameObject Obj = (GameObject)Instantiate(prefab); 這句代碼執(zhí)行完畢后同樣會在Hierarchy視圖中添加對應(yīng)的游戲?qū)ο?。把這種加載起個名字叫B形式加載。 下面我們學(xué)習(xí)異步加載游戲場景異步異步顧名思義就是不影響當(dāng)前游戲場景的前提下加載新場景。通常異步加載的方式分為兩種第一種是異步加載新游戲場景當(dāng)新場 景加載完成后進(jìn)入新場景并且銷毀之前的場景。第二種:同樣異步加載新場景新場景加載完畢后保留舊場景的游戲?qū)ο蟛⑶疫M(jìn)入新場景。 這里加載的內(nèi)容就是上面提到的A形式加載。然后B形式加載不會記入這里的加載。 第一種異步加載游戲場景對應(yīng)的方法是 Application.LoadLevelAsync(yourScene); 第二種異步家在游戲場景對應(yīng)的方法是 Application.LoadLevelAdditiveAsync (yourScene); 這兩種方法加載的方式完全一樣。異步加載其實重要還是應(yīng)用于游戲LOADING界面畢竟LOADING如果采用同步的機(jī)制會影響用戶體驗說到這里告訴大家 如何在Unity中制作游戲進(jìn)度條。我們應(yīng)當(dāng)在Unity中創(chuàng)建一個專門用于讀取進(jìn)度的場景假設(shè)A場景到C場景我們應(yīng)當(dāng)讓A場景先到讀取進(jìn)度的場景B場景 當(dāng)異步任務(wù)完成后在進(jìn)入C場景。 A B - C 在B場景中繪制游戲進(jìn)度條或讀取動畫。因為B場景僅僅是個顯示LOADING動畫的場景所以讀取該場景是瞬間就完成的。 程序在切換場景時應(yīng)當(dāng)有一個全全局的靜態(tài)變量來記錄簡要讀取的場景名稱。這里簡單的寫一下。 1. using UnityEngine; 2. using System.Collections; 3. public class Globe 4. 5. /在這里記錄當(dāng)前切換場景的名稱 6. public static string loadName; 在A場景中通過某些觸發(fā)條件 調(diào)用LoadLevel進(jìn)入B場景。 /記錄LOADING場景中需要讀取的C場景名稱 Globe.loadName = C; /先進(jìn)入B場景 Application.LoadLevel (B); OK我們在B場景中異步讀取C場景與 播放讀取動畫Loading.cs 綁定在B場景的攝像機(jī)對象身上。當(dāng)C場景異步讀取完畢后即可直接進(jìn)入C場景。 1. using UnityEngine; 2. using System.Collections; 3. public class Loading : MonoBehaviour 4. private float fps = 10.0f; 5. private float time; 6. /一組動畫的貼圖在編輯器中賦值。 7. public Texture2D animations; 8. private int nowFram; 9. /異步對象 10. AsyncOperation async; 11. /讀取場景的進(jìn)度它的取值范圍在0 - 1 之間。 12. int progress = 0; 13. void Start() 14. 15. /在這里開啟一個異步任務(wù) 16. /進(jìn)入loadScene方法。 17. StartCoroutine(loadScene(); 18. 19. /注意這里返回值一定是 IEnumerator 20. IEnumerator loadScene() 21. 22. /異步讀取場景。 23. /Globe.loadName 就是A場景中需要讀取的C場景名稱。 24. async = Application.LoadLevelAsync(Globe.loadName); 25. /讀取完畢后返回 系統(tǒng)會自動進(jìn)入C場景 26. yield return async; 27. 28. void OnGUI() 29. 30. /因為在異步讀取場景 31. /所以這里我們可以刷新UI 32. DrawAnimation(animations); 33. 34. void Update() 35. 36. /在這里計算讀取的進(jìn)度 37. /progress 的取值范圍在0.1 - 1之間 但是它不會等于1 38. /也就是說progress可能是0.9的時候就直接進(jìn)入新場景了 39. /所以在寫進(jìn)度條的時候需要注意一下。 40. /為了計算百分比 所以直接乘以100即可 41. progress = (int)(gress *100); 42. /有了讀取進(jìn)度的數(shù)值大家可以自行制作進(jìn)度條啦。 43. Debug.Log(xuanyusong +progress); 44. 45. /這是一個簡單繪制2D動畫的方法沒什么好說的。 46. void DrawAnimation(Texture2D tex) 47. 48. time += Time.deltaTime; 49. if(time = 1.0 / fps) 50. nowFram+; 51. time = 0; 52. if(nowFram = tex.Length) 53. 54. nowFram = 0; 55. 56. 57. GUI.DrawTexture(new Rect( 100,100,40,60) ,texnowFram ); 58. /在這里顯示讀取的進(jìn)度。 59. GUI.Label(new Rect( 100,180,300,60), lOADING! + progress); 60. 61. OK 下面我們繼續(xù)學(xué)習(xí)在游戲場景中加載對象文章的開始已經(jīng)告訴大家游戲場景中Hierarchy視圖中的所有的對象在切換場景的時候都會加載。其實有一種方法 可以讓某些游戲?qū)ο蟛粫患虞d如下圖所示首先在Hierarchy視圖中選擇一個游戲?qū)ο笤谟覀?cè)監(jiān)測面板視圖中我們可以看到一個 “小對勾”默認(rèn)情況下是勾選狀態(tài)說明該游戲?qū)ο筇幱诩せ顮顟B(tài)如果點掉的話該對象將被隱藏。這個小功能在開發(fā)中其實用處非常大請大家務(wù)必記住哈。 此時此刻大家相像一個游戲場景默認(rèn)進(jìn)入的時候是沒有任何游戲?qū)ο蟮娜缓筮\行游戲時開啟一個異步任務(wù)將它們一個一個的加載顯示出來這種方式適合異步的加載一個比較大的游戲場景,文章出處【狗刨學(xué)習(xí)網(wǎng)】。 Test.cs 把它掛在攝像機(jī)對象中。 1. 2. using UnityEngine; 3. using System.Collections; 4. public class Test : MonoBehaviour 5. /這里是需要加載激活的游戲?qū)ο?6. public GameObject Objects; 7. /當(dāng)前加載的進(jìn)度 8. int load_index =0; 9. void Start () 10. 11. /開啟一個異步任務(wù)加載模型。 12. StartCoroutine(loadObject(); 13. 14. IEnumerator loadObject() 15. 16. /便利所有游戲?qū)ο?17. foreach(GameObject obj in Objects) 18. 19. /激活游戲?qū)ο?20. obj.active = true; 21. /記錄當(dāng)前加載的對象 22. load_index +; 23. /這里可以理解為通知主線程刷新UI 24. yield return 0; 25. 26. /全部便利完畢返回 27. yield return 0; 28. 29. void OnGUI () 30. 31. /顯示加載的進(jìn)度 32. GUILayout.Box(當(dāng)前加載的對象ID是 + load_index); 33. 34. 如下圖所示我們把需要加載的游戲?qū)ο笠詳?shù)組的形式放在Objects數(shù)組中因為這些對象屬于未激活狀態(tài)所以不能通過Find 等方法在腳步那種中找到他們。講到這里我們在說說 編輯器賦值與代碼中賦值的區(qū)別編輯器中賦值所消耗的時間都會記在loadlevel ()讀取場景中。而代碼中使用Resource.load()這類方法所消耗的時間會記在腳本中。開發(fā)中還得自行的把握一下把loading加在那里。 當(dāng)然我們還可以使用Instantiate(prefab);方法來動態(tài)的創(chuàng)建游戲?qū)ο蟆ain.cs 把它掛在攝像機(jī)中。 35. using UnityEngine; 36. using System.Collections; 37. public class Main : MonoBehaviour 38. 39. public int count; 40. /在編輯器中預(yù)設(shè)一個游戲?qū)ο?41. public GameObject prefab; 42. void Start () 43. 44. StartCoroutine(loaditem(); 45. 46. void OnGUI() 47. 48. GUILayout.Box(游戲?qū)ο笠呀?jīng)加載到 + count); 49. 50. IEnumerator loaditem() 51. 52. /開始加載游戲?qū)ο?53. for(int i =0; i 1000; i+) 54. 55. Instantiate(prefab); 56. count = i; 57. /可以理解為刷新UI顯示新加載的游戲?qū)ο?58. yield return 0; 59. 60. /結(jié)束 61. yield return 0; 62. 63. 運行游
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 年產(chǎn)30000噸葡萄糖酸鹽系列食品添加劑項目可行性研究報告寫作模板-備案審批
- 中國刀的歷史演變
- 中國寫意人物畫課件
- 公文寫作關(guān)于公報課件
- 提高情商的課程培訓(xùn)
- 中國傳統(tǒng)節(jié)日春節(jié)課件
- 舞蹈藝考培訓(xùn)
- 腫瘤科特色服務(wù)護(hù)理總結(jié)
- 肝性腦病健康宣教
- 早教知識培訓(xùn)
- pergeos軟件教程評價許可介紹
- 出租車 專業(yè)部分考核試題 城市客運企業(yè)主要負(fù)責(zé)人和安全生產(chǎn)管理人員安全考核基礎(chǔ)題庫
- GB/T 9634.3-2002鐵氧體磁心表面缺陷極限導(dǎo)則第3部分:ETD和E形磁心
- GB/T 8478-2008鋁合金門窗
- 人教版七年級下冊數(shù)學(xué)《期末檢測試卷》
- 防腐除銹檢驗記錄
- 公司金融課件(完整版)
- 三維激光掃描技術(shù)與應(yīng)用實例-PPT課件
- 鐵路貨物裝載常用計算公式
- 14S501-1 球墨鑄鐵單層井蓋及踏步施工
- (新知杯)2017-2011上海市初中數(shù)學(xué)競賽試卷
評論
0/150
提交評論