1.项目需求:
Unity接入视频SDK让视频安置在Unity View的下方, Unity层作为其他布局的显示层这样做一个直播类的app只用写一套代码, 然后项目接入SDK即可, 少量的原生代码即可实现功能, 也省去了IOS开发Android开发的必要.
效果如图:
2.踩坑
Unity3d五 android 设置背景透明的方法 - QQ18334373taikongyi的专栏 - CSDN博客,这是前人踩过的坑我继续踩!!!! 里面的连接一一看了个遍百度google翻个底朝天...都没有比较好的解决方案.
当然我现在项目用的是Unity5.6的版本, 看完最值得可信的是Unity4.2的版本修改GLSurfaceView于是乎去找class.jar 的UnityPlayer发现根本没有GLSurfaceView只有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 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之上
/**
* 获取控件,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会不会有这种情况