Unity工程中,制作Android启动页。启动时会自动显示启动页,然后在Unity中手动关闭启动页,这样可以保证启动无黑屏。
一、完成Android工程:
打开Android Studio,新建空工程。
进入项目后,点击File-New,新建一个Module。
Module中添加Splash图片:src/main/res/drawable/splash.png。
新建Class,Splash.java。
Android工程结构图:

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:

打包arr包:

打出的arr包会在build/outputs/arr里,将arr包放入Unity工程:Assets/Plugins/Android里。
三、Unity中隐藏启动页:
Unity Awake中隐藏启动页,和一般调用jar包方式不一样,调用继承了Activity的Java类,调用方法如下:
/// <summary>
/// 隐藏启动图
/// </summary>
public static void HideSplash()
{
try
{
AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
jo.Call("hideSplash");
}
catch (Exception e)
{
LWDebug.Log("隐藏启动图失败:" + e.Message);
}
}
四、配置AndroidManifest.xml:
AndroidManifest.xml中改成启动我们Splash的Activity:
<activity
android:name="com.android.tyvrsplash.Splash"
android:label="@string/app_name"
<meta-data
android:name="unityplayer.UnityActivity"
android:value="true" />
</activity>
网友评论