Unity启动无黑屏,显示Android Splash启动页

Unity工程中,制作Android启动页。启动时会自动显示启动页,然后在Unity中手动关闭启动页,这样可以保证启动无黑屏。

一、完成Android工程:

打开Android Studio,新建空工程。
进入项目后,点击File-New,新建一个Module。
Module中添加Splash图片:src/main/res/drawable/splash.png。
新建Class,Splash.java。

Android工程结构图:


image.png

Splash.java代码:
Splash继承UnityPlayerActivity,重写UnityPlayerActivity中的onCreate,在onCreate中显示启动页,在Unity Awake中关闭启动页,这样启动无黑屏。
注意:若项目中引入的第三方SDK中的jar包或arr包中,有继承了UnityPlayerActivity,
则我们不能直接继承UnityPlayerActivity,需要继承第三方的SDK的Activity,第三方的jar包也需要导入到项目中。

package com.android.tyvrsplash;

import android.annotation.SuppressLint;
import android.content.res.Resources;
import android.os.Bundle;
import android.widget.ImageView;
import com.unity3d.player.UnityPlayerActivity;

/**
 * 启动页
 * 继承UnityPlayerActivity
 *
 *注意:若项目中引入的第三方SDK中的jar包或arr包中,有继承了UnityPlayerActivity,
 *则我们不能直接继承UnityPlayerActivity,需要继承第三方的SDK的Activity
 *
 */
public class Splash extends UnityPlayerActivity{
    static final String TAG = "com.android.tyvrsplash";
    private static ImageView bgView = null;

    @Override
    protected void onCreate(Bundle arg0) {
        super.onCreate(arg0);
        showSplash();
    }

    /**
     * 显示splash
     */
    @SuppressLint("NewApi")
    public void showSplash() {
        try {
            if (bgView != null){
                hideSplash();
            }
            bgView = new ImageView(this);
            bgView.setBackgroundResource(R.drawable.splash);
            bgView.setScaleType(ImageView.ScaleType.CENTER);
            Resources resources = getResources();
            // 将启动页宽高设为屏幕宽高
            mUnityPlayer.addView(bgView, resources.getDisplayMetrics().widthPixels, resources.getDisplayMetrics().heightPixels);
            bgView.bringToFront();
        } catch (Exception e) {
            // error("[onShowSplash]" + e.toString());
        }
    }

    /**
     * 隐藏splash
     */
    @SuppressLint("NewApi")
    public void hideSplash() {
        try {
            if (bgView == null)
                return;

            runOnUiThread(new Runnable() {
                public void run() {
                    mUnityPlayer.removeView(bgView);
                    bgView = null;
                }
            });
        } catch (Exception e) {
            // error("[onHideSplash]" + e.toString());
        }
    }
}

此时会报错,因为继承UnityPlayerActivity需要引用,Unity的classes.jar,jar包在Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Classes中,将classes.jar导入到libs文件夹中,classes.jar右击选择 Add as Lib...

二、打包arr包,导入Unity工程中:

最后再打成arr包,需要注意的是打成arr包时,不需要将依赖的jar包打入进去,build.gradle中,implementatio 改成compileOnly:

image.png

打包arr包:


image.png

打出的arr包会在build/outputs/arr里,将arr包放入Unity工程:Assets/Plugins/Android里。

三、Unity中隐藏启动页:

Unity Awake中隐藏启动页,和一般调用jar包方式不一样,调用继承了Activity的Java类,调用方法如下:

    /// 
    /// 隐藏启动图
    /// 
    public static void HideSplash()
    {
        try
        {
            AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
            AndroidJavaObject jo = jc.GetStatic("currentActivity");
            jo.Call("hideSplash");
        }
        catch (Exception e)
        {
            LWDebug.Log("隐藏启动图失败:" + e.Message);
        }
    }
四、配置AndroidManifest.xml:

AndroidManifest.xml中改成启动我们Splash的Activity:

      
      

你可能感兴趣的:(Unity启动无黑屏,显示Android Splash启动页)