unity之載入場景

2022-03-19 06:07:37 字數 1466 閱讀 5410

遊戲中的loading分為:靜態loading和動態loading。

簡單形象的做個比喻:

靜態loading可能就是一張背景圖。而動態的loading就是在讀取的同時有乙個東西在「轉圈」。

1.靜態loading:2.動態loading:

一些常見問題:

一. 遊戲是否可以只做乙個場景?

可以,執行 gameobject.instantiate(「prefabname」) 方法來讀取。但是遊戲只做乙個場景有兩個致命的問題。 

1.loading介面沒動畫或者動畫很難看

因為有個辦法可以有動畫,比如把你的讀取場景的方法拆成3個,用協同任務來依次執行這三個方法,因為協同任務沒執行乙個後,會呼叫一下所有指令碼的update,所以按照這個邏輯你介面的動畫就可以動3下。就算做出來了動畫動的也會非常難看!!

2.記憶體的解除安裝完全需要你自己手工維護

unity對讀取的記憶體有乙個快取池的概念,如果你採用它的標準方式來切換場景,那麼unity會在切換場景的時候自動幫你把沒有被引用的資源物件從記憶體中解除安裝掉。但是你現在是乙個場景了,那麼解除安裝記憶體的東西就要萬全自己手工維護了。。

二.非同步載入場景為什麼最後會卡一下

這個罪魁禍首就是unity不支援多執行緒。遊戲載入被你分成了兩部分、第一部分是載入場景,你可以把場景上已知的模型都儲存在scene上面,此時你在呼叫非同步載入場景的時候會進度動畫會非常的均勻。載入場景你可以理解成unity自己在多執行緒載入,有可能他的後台也是同步,但是我們看不到原始碼從它的效果上來看它載入場景是多執行緒。

但是問題出在了第二步上,因為你需要載入未知模型,舉個例子,當你進副本載入場景的時候,場景可不知道你身上帶了那幾個英雄。所以場景載入完畢後你還需要去載入的這些模型。無論你是用協同任務也好,還是在方法裡面執行也好,因為unity沒有多執行緒,一般為了更快的能進遊戲這裡的載入都會選擇同步載入,所以你會發現大部分遊戲進度條載入到最後都會卡一下。

為了解決這個問題,在載入的時候一定要避免載入場景後自己寫的哪個同步載入的方法,盡量讓他執行更少的載入。

1.盡可能讓場景多包含一些資源,我看有些人為了節省資源,開啟場景以後動態的載入一些地面上的小物件。我覺得這種情況多做幾個場景就可以了,不用在乙個同步方法裡出力過多的東西。

2.人物模型可以考慮預載入,也可以考慮常駐記憶體。。因為你的人物模型可能不止在戰鬥中才會被使用。

三、減少loading的次數

//

引數1 載入場景之前做的事情

//引數2 新載入的場景名

//引數3 載入場景後要做的事情

public

void loadscene(system.action before, string

scenename, system.action end)

//非同步載入場景, 載入完畢後 呼叫 end方法。

else

}

loadscene

unity 場景載入

gui.draw texture 繪製紋理 static function drawtexture position rect image texture scalemode scalemode scalemode.stretchtofill alphablend bool true,imageas...

Unity打包載入場景(Assetbundle )

打包scene 我們可以把整個場景進行打包,因為移動平台不能更新指令碼,所以這個功能就會有所限制,我的建議是烘培場景,然後把多個場景可復用的物件移除,場景中只保留獨一無二的遊戲物件,然後再打包場景,執行遊戲時載入場景後,再動態的將之前移除的物件重新新增進來。menuitem custom edito...

unity 場景管理(Loading介面載入)

很久以前的設計 這是單例的設計,需要掛載在遊戲物件上。title 場景管理器 description 實現場景的各種載入 公開非同步運算元給loading介面使用 using system.collections using unityengine using unityengine.scenema...