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

2021-10-02 08:51:42 字數 4804 閱讀 9169

很久以前的設計…這是單例的設計,需要掛載在遊戲物件上。

/***

* title:

* 場景管理器

* description:

* 實現場景的各種載入

* 公開非同步運算元給loading介面使用

*/using system.collections;

using unityengine;

using unityengine.scenemanagement;

public

class

levelmanager

:singletonmono

public

static

void

initload()

public

void

loadnext()

public

void

loadback()

public

void

loadagain()

public

void

loadscene

(int index)

public

void

loadscene

(string scenename)

public

ienumerator

loadsceneasync

(string scenename)

///

/// 輸入乙個場景的名稱,

/// 先跳轉到loading場景在跳轉進目標場景中

///

///

public

void

loadscenewithloading

(string scenename)

public

ienumerator

loadnextasync()

public

ienumerator

loadbackasync()

public

ienumerator

loadagainasync()

private

void

ondisable()

public

void

quitgame()

}

這是我現在的設計,狀態機設計,我現在的設計是能不掛載遊戲物體的指令碼死都不掛。

using system;

using unityengine;

using unityengine.scenemanagement;

namespace scene

///

/// 特殊loading場景

///

private

loadingscenestate _loadingscene;

///

/// 當前場景狀態

///

private

iscenestate _curscene;

///

/// 非同步運算元

/// 檢視當前場景是否已經載入完成

///

public

asyncoperation loadingprocess;

///

/// 輸入乙個場景的名稱,

/// 先跳轉到loading場景在跳轉進目標場景中

///

///

private

void

loadscenewithloading

(iscenestate scene)

///

/// 不通過loadingscene簡單同步載入

///

///

private

void

loadscene

(iscenestate scene)

scenemanager.

loadscene

(scene.scenename);}

///

/// 非同步載入,返回非同步運算元,協程操作

///

///

///

private

void

loadsceneasync

(iscenestate scene)

//使用非同步運算元直接賦值監控就行了,好像不用迭代

debug.

log($"非同步載入場景+");

loadingprocess = scenemanager.

loadsceneasync

(scene.scenename)

; loadingprocess.allowsceneactivation =

false

;//非同步載入

}///

/// 建立乙個場景狀態

///

///

public iscenestate createscenestate

<

t>

(string scenename,

bool isabload,

bool iswithloading)

where t:iscenestate,

new(

)///

/// 載入場景

///

/// 場景狀態類

/// 是否已經通過loading介面載入

public

void

setscenestate

(iscenestate scene,

bool isloading)

else

}else

}///

/// 載入場景

///

///

/// 場景名稱

/// 場景是否在ab包中

/// 是否屬於非同步loading介面載入

/// 是否已經通過loading介面載入

public

void

setscenestate

<

t>

(string scenename,

bool isabload,

bool iswithloading,

bool isloading)

where t:iscenestate,

new(

)public

void

update()

else

}//新狀態初始化if(

!_curscene.isbegin)

//場景狀態更新

_curscene.

sceneupdate()

;}}}

using system;

using system.collections.generic;

using system.linq;

using system.text;

using system.threading.tasks;

namespace scene

///

/// 場景開始

///

public

virtual

void

scenebegin()

///

/// 場景進入

///

public

virtual

void

sceneupdate()

///

/// 場景離開時

///

public

virtual

void

sceneexit()

}}

using uifw;

namespace scene

public

override

void

scenebegin()

public

override

void

sceneexit()

}}

需要配合指定的ui

using unityengine;

using unityengine.ui;

namespace uifw

public

void

awake()

public

void

update()

//更新ui

unity 場景載入

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

unity之載入場景

遊戲中的loading分為 靜態loading和動態loading。簡單形象的做個比喻 靜態loading可能就是一張背景圖。而動態的loading就是在讀取的同時有乙個東西在 轉圈 1.靜態loading 2.動態loading 一些常見問題 一.遊戲是否可以只做乙個場景?可以,執行 gameob...

Unity使用git管理專案時場景中丟失指令碼的問題

之前使用git忽略檔案的配置就是忽略了temp和library兩個資料夾,後來在網上看到乙個unity忽略檔案的配置,感覺很全,比自己的好多了,於是就拿來用了,檔案是這樣的 最開始以為是unity版本不同導致的,但是重新安裝了一樣版本的unity之後發現還是一樣的情況。後來突然想到可能是專案中的me...