很久以前的設計…這是單例的設計,需要掛載在遊戲物件上。
/***
* 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...