JavaFX,Unity3D,Android,IOS等技术教程和生活随笔,仅供记录

http://www.wingmei.cn/wp-content/themes/Vtrois-Kratos-e85a527/images/background.jpg

Unity3D第一次启动黑屏时间太长

最近在做一个VR眼镜项目,台北那边反应App第一次启动有很长的黑屏时间,然后才跳转到Unity3D Splash画面,需要解决。

其实这个还是很奇怪的,我尝试了一下以前的Unity3D项目,发现启动直接就是Unity3D Splash画面。不知道是不是Unity3D更新版本后做了什么变动。

仔细查看了一下,现在Unity3D App第一次启动时,会首先在Android/Data/包名下面缓存Shader Cache,大概有80-90个文件。之后启动,将会很快到到Unity3D Splash画面。但如果手动将Shader Cache删除,则启动依然会有很长时间黑屏来写入Shader Cache

这个应该就是黑屏时间长的原因了。虽然我在当前设备上测试第一次也就大概3秒左右,可台北反映有10秒以上…

大概是设备的差异,但问题还是要解决的。

这个问题需要我们写Android的插件,然后自己手动将Unity3D Splash覆盖掉。

代码如下:

public class MainActivity extends UnityPlayerActivity {
    private ImageView bgView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
        super.onCreate(savedInstanceState);
        try {
            bgView = new ImageView(UnityPlayer.currentActivity);
            bgView.setImageResource(R.drawable.loading);
            bgView.setScaleType(ImageView.ScaleType.CENTER_CROP);
            mUnityPlayer.addView(bgView, getRealWidth(), getRealHeight());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
       public void hideSplash(){
        new Handler(Looper.getMainLooper()).post(new Runnable() {
            @Override
            public void run()
            {
                mUnityPlayer.removeView(bgView);
                bgView=null;
            }
        });
    }

在这里我只是简单的增加了一个ImageView,将整个画面覆盖,我们需要在Unity3D的Scene中将这个ImageView移除掉,来显示我们的3D场景。当然,这个启动界面你可以显示Gif或者其他自定义内容,来让效果看的更好。

		void Start () {
		AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
		AndroidJavaObject jo = jc.GetStatic ("currentActivity");
		jo.Call ("hideSplash");
	}

这样就能勉强解决这个问题了。

希望Unity后续版本能够改进这个问题,不过当前Unity3D支持的Android最低版本已经变更为Android 4.1了,大概也在进行Android旧设备的淘汰了。

点赞

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注