美文网首页android
Unity Android 背景透明 相机透明

Unity Android 背景透明 相机透明

作者: 小云锅 | 来源:发表于2019-01-17 16:41 被阅读0次

1.项目需求:

Unity接入视频SDK让视频安置在Unity View的下方, Unity层作为其他布局的显示层这样做一个直播类的app只用写一套代码, 然后项目接入SDK即可, 少量的原生代码即可实现功能, 也省去了IOS开发Android开发的必要.

效果如图:

Unity中的显示效果 实现的效果如图

2.踩坑

Unity3d五 android 设置背景透明的方法 - QQ18334373taikongyi的专栏 - CSDN博客,这是前人踩过的坑我继续踩!!!! 里面的连接一一看了个遍百度google翻个底朝天...都没有比较好的解决方案.

当然我现在项目用的是Unity5.6的版本, 看完最值得可信的是Unity4.2的版本修改GLSurfaceView于是乎去找class.jar 的UnityPlayer发现根本没有GLSurfaceView只有SurfaceView

于是乎降级4.2呵呵, UGUI都找不到了...我拿来干嘛???要你何用 辗转反侧那就修改class.jar的SurfaceView 吧..

直接继承UnityPlayerActivity或者UnityPlayer都是不行的,于是乎使出逆向工具,dex2jar apktool jdgui jeb smail notepad++等.

改完终究是没有效果的,什么android窗口透明啦activity透明啦view透明啦主题透明啦,一样一样的.尴尬

最终意识到黑色的背景来源于渲染没有alpha透明通道导致的,在UnityPlayer里面渲染的时候把SurfaceHolder传入到ndk层去了,就是native层,于是乎去找函数导出表,libunity.so这玩意还做了加固的...手动注册的native函数...算了经验不足pass

3.解决方案

找啊找啊找 Unity3D export to Android with transparent background? Search this thread... Watch Thread 

嗯?什么捉鸡的英语但是还是看见了 "传奇的存在!!!" 那还吧继续升级引擎到Unity 2018.3最新的先试试 果然没骗我呢, 不过android方面调整很多,ndk 升级到r13b?还是啥没注意 sdk升级到26也是就8.0了不然不给编译折腾一番好歹编译过了原来的项目 值得注意的是,camera的属性需要设置为rgba的Solid Color方便alpha通道, 然后alpha值设置为0即可

当然引擎不能用最新的应为不能破解,可能会出一些问题,还要考虑到兼容原来的Unity 5.6 试了下Unity 2017.2 和 Unity 2017.3 和 Unity 2017.4 TLS发现Unity 2017.2 这个版本是不存在那个勾选项的....啊这...Unity 2017.4 TLS又无法破解,最后选择了2017.3.1p4这个版本完美升级Unity 5.6没有任何错误原来的其他项目.

最后附上破解地址 全系列Unity v4.x.x & v5.x.x & v2017.x.x & v2018.x.x破解Win&Mac! - 资源库 - Unity圣典社区

希望后来人少踩些坑吧...哎

4.让你的自定义View安置于Unity View的下方

新建一个Layout

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="match_parent"

    android:layout_height="match_parent" >

    <com.tencent.rtmp.ui.TXCloudVideoView

            android:id="@+id/video_view"

            android:layout_width="match_parent"

            android:layout_height="match_parent"

            android:layout_centerInParent="true"

            android:visibility="gone"/>

    <FrameLayout

        android:id="@+id/unity_layout"

        android:layout_width="match_parent"

        android:layout_height="match_parent">

    </FrameLayout>

</RelativeLayout>

把你需要展示的View放到unity_layout之上

继承UnityPlayerActivity重写onCreate加载你的布局然后查找到unity_layout把他添加进来

/**

    * 获取控件,fix打成jar包无法获取控件

    * @param context

    * @param id

    * @return View

    */

    public static View findViewById(Activity context, String id) {

    if (context == null)

    return null;

    int res_id = context.getResources().getIdentifier(id, "id", context.getPackageName());

    return context.findViewById(res_id);

    }

值得注意的是项目被打成jar包了,直接findViewById是找不到的,我用的eclipse导出的jar包不知道as会不会有这种情况

最后AndroidMainfest.xml配置Activity的入口,Application入口看需求配置如果你的SDK里面必须在Application里初始化就得重写

5.IOS解决方案

Unity iOS 背景透明 相机透明 - 简书

相关文章

网友评论

    本文标题:Unity Android 背景透明 相机透明

    本文链接:https://www.haomeiwen.com/subject/etyidqtx.html