如果使用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就不会包在发布的内容里面了。

12-11 16:15