Unity3D隐藏启动logo
Unity默认开启logo显示,专业版的可以勾选去掉,但个人版的无法去掉勾选,当然也可以下载激活成功教程版的软件,省去了很多麻烦。本文以Android平台为例,其他平台也可参考此做法。
专业版带启动logo去除的方法
进入 BuildSettings -> 左下角的Player Settings -> Player -> 选择平台 -> Android-Settings for Android下有个Splash Screen去掉勾勾就行。个人版这个勾勾是无法去掉的,只有正版或者激活成功教程版的可以去掉。
个人版带启动logo隐藏的方法
这里说的是隐藏,也可以称为覆盖,并不是去掉。实际上的做法是在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的方式以及与透明背景冲突的解决方案,创作不易,各位老铁点个赞。
今天的文章Unity3D隐藏启动logo分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/25195.html