美文网首页Unity3D与游戏开发Android开发经验谈
给Unity的Android工程加上广告代码(1)

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

作者: 云泓加油 | 来源:发表于2019-02-07 09:50 被阅读16次

     从该链接吸取了一些知识 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的代码如下

    注意红色部分的代码d

    红色框部分的代码就是把Unity渲染处的图片添加到新的Activity的其中的u3d的view里面去。出来的效果是这样

    可见游戏的一部分被覆盖了,我考虑可能是因为另外一个view,adlayout的存在,使得unity渲染的效果被裁剪了,因为我没有把窗口改变的事件设置传入,这时我们把UnityPlayerActivity中其他的一些事件响应函数放入MainActivity.

    但是添加以后我发现,由于没有设置unity中camera对window size的大小的变化,所以手机上看不到明显的变化。后面有空再做调整,至少上面的图得到了我们想要的效果,一个view渲染了unity的游戏,下面我们需要在另一个view,渲染广告模块。

    相关文章

      网友评论

        本文标题:给Unity的Android工程加上广告代码(1)

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