给Unity的Android工程加上广告代码(1)

从该链接吸取了一些知识 https://blog.csdn.net/crazy1235/article/details/46733221

今天我们来说一下,如何给Unity的Android工程加上非unity的广告代码。

首先,你需要把Unity的代码导出到Android的工程

在这里插入图片描述注意要在加红位置打勾
在导出的过程中,有可能会导出失败,本人碰到过的原因是项目在导出之前需要先进行build
在这里插入图片描述
如果上面的导出不成功,请先build一个版本出来
导出完成以后,会在你之前选择的目录出现一个和你在unity的Product Name处设置一样的名字的文件夹。

这个时候,你需要用Android Studio去打开那个文件夹(Android Studio 可以在 http://www.android-studio.org 处下载到,需要设置SDK,NDK等)
在这里插入图片描述
本人使用的是3.1.3版本
不同的版本可能在配置上面有些区别,请百度或者google,如还不能解决,欢迎交流

通过 Open an existing Android Studio project打开刚才从Unity导出的Android工程。
在这里插入图片描述
会提示Sync Gradle, 那就sync吧
这时我们打开工程目录的java文件夹可以看到
在这里插入图片描述
在这个文件里面,包含了所有unity的代码
打开以后,代码如下
在这里插入图片描述
Activity在Android Project中的作用,我们可以理解为相当于Unity中的一个Scene. 上图中1位置的mUnityPlayer,是unity在转换到android的时候,给自己所有代码的一个打包状态,他会把自己做成.so 和其他的一些资源文件,最后留给Activity 一个可以访问的对象。然后在Activity中图2的代码,会把渲染的结果放入一个view,即( setContentView(mUnityPlayer) ) . 并且看下面的代码也可以发现,这个Activity会把其他事件也传给mUnityPlayer.
在这里插入图片描述
看到这里,本人的想法是,既然activity当前的view可以指定渲染mUnityPlayer的所有结果,那么我们是不是可以在activity里添加多个view,分别渲染广告的代码和游戏的代码呢?说干就干

做过Android项目的开发者肯定都知道,需要改变android工程项目的控件布局和数据,需要看两个地方,一个是AndroidManifest.xml文件,另一个是res文件夹。

打开AndroidManifest.xml的代码,我发现这个文件和在unity中的结构基本相同
在这里插入图片描述
两个Activity
其中的一个activity是百度的广告插件封装到unity的,这也是我想研究如何在android工程添加代码的原因,那个插件实在是不好用,响应也不是太好。另一个是unity本身定义的activity,并且android.intent.action.MAIN和android.intent.category.LAUNCHER,指定了他是最早被加载的.(注意不同的unity项目导出的AndroidManifest.xml可能有所不同,上面的之所以包含一个百度的activity是因为我使用了百度的unity封装插件,如果没有使用,响应的activity就不会有,我建议第一次尝试的时候,先使用干净的unity版本导出,这样就不会出现乱七八糟的插件来影响调试效果)

那我们就尝试在res里面添加view吧
在这里插入图片描述
打开Res,惊叹!!!这是什么鬼?框架呢?
研究以后,我想明白了,unity把资源也都打包起来了,所以在res里面看不到任何可以改动的有效资源。

我想到的解决方法是,通过android studio创建一个新的activity,并且这个activity继承自UnityPlayerActivity,这样我就可以在这个新的activity里面,使用unity那边的所有功能了,那咱们来试试看吧:)
在这里插入图片描述
项目位置右键,呼出菜单
咱们在这里添加一个空的Activity(来 自己的工程,咱们翻身做主人,想怎么折腾就怎么折腾,哈哈)
在这里插入图片描述
创建页面
随便起个名字就行,Package Name(包名) 和项目保持一致。

创建完成以后,先把MainActivity的继承关系设置好
在这里插入图片描述
设置继承关系
并且在RES文件里面,我们会发现,出现了layout,而且里面出现了Activity_main.xml. 我们尝试在里面配置一些控件,用来给广告和游戏分别渲染,看看是否能成功。
在这里插入图片描述
他对应的代码如下
在这里插入图片描述
然后我们要修改AndroidManifest.xml里面添加的activity的属性
在这里插入图片描述
我们把原本属于UnityPlayerActivity的Main和LAUNCHER赋值给了MainActivity,然后修改 MainActivity的代码如下
在这里插入图片描述
红色框部分的代码就是把Unity渲染处的图片添加到新的Activity的其中的u3d的view里面去。出来的效果是这样
在这里插入图片描述
可见游戏的一部分被覆盖了,我考虑可能是因为另外一个view,adlayout的存在,使得unity渲染的效果被裁剪了,因为我没有把窗口改变的事件设置传入,这时我们把UnityPlayerActivity中其他的一些事件响应函数放入MainActivity.
在这里插入图片描述
但是添加以后我发现,由于没有设置unity中camera对window size的大小的变化,所以手机上看不到明显的变化。后面有空再做调整,至少上面的图得到了我们想要的效果,一个view渲染了unity的游戏,下面我们需要在另一个view,渲染广告模块。

猜你喜欢

转载自blog.csdn.net/u012400268/article/details/88074931