1.思路 :
也是用的大神的解决方案: 传送门奥格瑞玛
在unityplayerActivity OnCreate 方法中 先生成一个启动图片的界面 遮盖掉黑的阶段.等unity 正式加载场景出来之后再去关掉 android中设置的 logo 界面
2.直接上代码:
(1)在 onCreate 中生成一个启动图片的界面
首先定义 ImageView
private ImageView bgView = null;
// Setup activity layout
@Override protected void onCreate(Bundle savedInstanceState)
{
Log.e("====================", "MainApplication onCreate");
requestWindowFeature(Window.FEATURE_NO_TITLE);
super.onCreate(savedInstanceState);
mUnityPlayer = new UnityPlayer(this);
setContentView(mUnityPlayer);
mUnityPlayer.requestFocus();
OpenInstallHelper.getWakeUp(this.getIntent());
fullScreen(this,true);
//这里去处理 启动图片
onShowSplash();
}
启动图片的设置代码:
public void onShowSplash() {
if (bgView != null)
return;
try {
bgView = new ImageView(UnityPlayer.currentActivity);
//R.drawable.logo 走资源库中放一张图片到res 下 drawable-xxhdpi 文件 取名字logo
bgView.setImageResource(R.drawable.logo);
//设置成全屏自适应 ImageView.ScaleType 有很多类型可以选择 比如原尺寸,全屏
bgView.setScaleType(ImageView.ScaleType.CENTER_CROP);
Resources r = mUnityPlayer.currentActivity.getResources();
mUnityPlayer.addView(bgView);
} catch (Exception e) {
e.printStackTrace();
}
}
3.unity 场景加载完成的时候关闭启动图片
C# 中 第一个场景 start 函数 关闭掉之前设置的启动图片
上代码:
public static void CloseSplash()
{
#if UNITY_ANDROID
AndroidJavaClass jclass = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject currentActivity = jclass.GetStatic<AndroidJavaObject>("currentActivity");
AndroidJavaClass splashHelper = new AndroidJavaClass("com.plugin.sdk.SplashHelper");
splashHelper.CallStatic("CloseSplash");
#endif
}
在AS 中接收 处理
public void CloseSplash()
{
try {
if (bgView == null)
return;
UnityPlayer.currentActivity.runOnUiThread(new Runnable() {
public void run() {
mUnityPlayer.removeView(bgView);
bgView = null;
}
});
} catch (Exception e) {
e.printStackTrace();
}
}
至此处理完毕 启动主题会秒白一下 暂时没找到处理方案
之前设置主题的方式 会导致游戏切后台前台切换的时候显示 异常也没处理成功 暂时采用目前这种方案 以后有更好的处理方式在做记录