在Android中Unity3D透明背景的实现

在Unity中,可以通过Window->Rendering->lighting->在属性面板中选择Environment,修改Skybox Material None来去掉天空盒。
在这里插入图片描述
但去掉天空盒的效果是这样的:
在这里插入图片描述
这样的效果明显不是预期的效果。

去掉天空盒并不代表背景被透明,还需要设置Camera的背景。
在这里插入图片描述

需要设置黑色透明度0,即ARGB为(0,0,0,0)。透明度不为0则无法实现透明效果。
在这里插入图片描述
修改透明度后再导入Android中,运行的效果是这样的:
在这里插入图片描述
奇怪,明明修改了透明度但没效果。其实设置透明度为0后即可在Android的Surface设置背景透明。
在2021版Unity导出的Android Lib源码中,在UnityPlayer中已经有代码可以进行设置,只不过需要配置isWindowTranslucent的属性。

private SurfaceView CreateGlView() {
        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);
        }

其实在生成的模块中有UnityThemeSelector.Translucent的主题:

<style name="UnityThemeSelector.Translucent" parent="@style/UnityThemeSelector">
    <item name="android:windowIsTranslucent">true</item>
    <item name="android:windowBackground">@android:color/transparent</item>
</style>

只需要在AndroidManifest.xml中改为透明的UnityThemeSelector.Translucent主题即可。

<activity
    ...
    android:theme="@style/UnityThemeSelector.Translucent">

注意:设置透明的windowBackground属性将Activity背景设为透明,这样是让应用可以透传看到上一个进程的界面,如果不设置的只能看到3D模型下的UI界面。

运行后看效果:
在这里插入图片描述
可以看到设置透明主题后能看见手机主界面了,达到预期的透明效果。

  • 7
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

言并肃

感谢大哥支持!您的鼓励是我动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值