????????如果使用Unity發布WebGL經常會和網頁進行交互,為了能夠做到界面統一,往往所有UI都是在頁面上開發的,Unity本身不做任何UI或者只做三維UI,但是在開發過程中,為了測試接口,難免要在Unity中做一些UI來方便測試功能,但這些UI在發布成WebGL之后必須消失。
? ? ? ? 一開始的時候使用的是這樣的方法,就是先檢查是否是WebGLPlayer平臺,如果是的話,就刪除特定UI,代碼類似:
if(Application.platform == RuntimePlatform.WebGLPlayer)
{Destroy(testUI.gameObject);
}
? ? ? ? 這樣做有個問題,就是測試的UI實際上是打包到了發布的內容里面了,如果測試UI內容比較復雜的話,還是會占用一定空間。
? ? ? ? 后來想到一個辦法,就是直接把測試UI做成prefab,放到Resources文件夾里面,然后在運行階段加載進來,類似這樣:
#if UNITY_EDITOR_WIN
void Start()
{Canvas canvas = Resources.Load<Canvas>("UIPrefabs/TestUI");canvas = Instantiate(canvas);canvas.transform.SetParent(uiRoot);
}
#endif
????????由于加載的代碼被包在了#if UNITY_EDITOR_WIN和#endif之間,所有只有在編輯器里面才會從Reources文件夾中加載UI的Prefab,在發布成WebGL的時候并不會編譯這段代碼,所以也就不會加載測試UI,同時場景中也沒有直接引用這個Prefab,所以這個UI的Prefab就不會包在發布的內容里面了。