赞
踩
进入 BuildSettings -> 左下角的Player Settings -> Player -> 选择平台 -> Android-Settings for Android下有个Splash Screen去掉勾勾就行。个人版这个勾勾是无法去掉的,只有正版或者破解版的可以去掉。
这里说的是隐藏,也可以称为覆盖,并不是去掉。实际上的做法是在Android平台端的UnityPlayer
界面上添加一个View
来覆盖启动logo。Unity端通知Android端3D模型启动的状态,实际上就是Unity调用Android的方法来覆盖启动logo。
首先编写C#脚本,将脚本与模型绑定。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class AndroidCaller : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
OnStart();
}
void OnStart()
{
if(Application.platform != RuntimePlatform.Android) return;
AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
jo.Call("onUnityObjectStart")
}
}
android工程中需要定义一个onUnityObjectStart方法与C#脚本中定义一致。
public void onUnityObjectStart() {
Log.d(TAG, "onUnityObjectStart");
runOnUiThread(new Runnable() {
@Override
public void run() {
mUnityPlayer.removeView(mIvMask);
}
});
}
运行后的效果如下:
如果Activity的主题设置为UnityThemeSelector.Translucent
UnityThemeSelector.Translucent
主题设置了windowIsTranslucent
属性为true。
<item name="android:windowIsTranslucent">true</item>
UnityPlayer
源码中,如果设置了windowIsTranslucent
为true则会SurfaceView.setZOrderOnTop(true)
将SurfaceView置于顶部最上层,从而导致其他的View无法覆盖SurfaceView。
SurfaceView var1;
(var1 = new SurfaceView(this.mContext)).setId(this.mContext.getResources().getIdentifier("unitySurfaceView", "id", this.mContext.getPackageName()));
if (this.IsWindowTranslucent()) {
var1.getHolder().setFormat(-3);
var1.setZOrderOnTop(true);
} else {
var1.getHolder().setFormat(-1);
}
因此设置透明背景时需要注意此问题,有什么解决方案呢?
解决方案如下
在onCreate
方法中UnityPlayer
创建后,通过findViewById
找到对应的SurfaceView
,将SurfaceView.setZOrderOnTop()
方法改为不会遮挡UI控件的SurfaceView.setZOrderMediaOverlay()
方法。
int resId = getResources().getIdentifier("unitySurfaceView", "id", getPackageName());
SurfaceView surfaceView = findViewById(resId);
if (surfaceView != null) {
surfaceView.getHolder().setFormat(PixelFormat.TRANSLUCENT);
surfaceView.setZOrderMediaOverlay(true);
}
当然也可以反编译修改unity-classes.jar
的代码。
以上为Unity3D在Android中隐藏启动logo的方式以及与透明背景冲突的解决方案,创作不易,各位老铁点个赞。
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。