写点什么

Android/Unity 大乱斗 - 完整双方集成交互指南

作者:芝麻粒儿
  • 2022 年 7 月 15 日
  • 本文字数:2561 字

    阅读完需:约 8 分钟

Android/Unity大乱斗-完整双方集成交互指南

👉关于作者

众所周知,人生是一个漫长的流程,不断克服困难,不断反思前进的过程。在这个过程中会产生很多对于人生的质疑和思考,于是我决定将自己的思考,经验和故事全部分享出来,以此寻找共鸣!!!专注于 Android/Unity 和各种游戏开发技巧,以及各种资源分享(网站、工具、素材、源码、游戏等)


👉即将学会

从头到脚,从懵懂到运行,完美搞定 Android 和 Unity 联合开发。文章分上下两篇。

👉背景

🙈小空和🙎小芝:这是一个很长很长的 story!

👉实践过程

开篇

源码地址:RXlung/Android-Unity---: Android/Unity大乱斗-完整双方集成交互指南 (github.com)

本文目的,将 Unity 集成到 Android 端,学完本文后你可以做到

  1. Android 任意布局加载 Unity 3D 场景

  2. 任意操作布局中的按钮/3D 物品(缩放旋转等)

  3. 互相消息通信(你叼我,我叼你)

  4. 自由切换 Unity 中的场景

  5. 动态加载手机 SD 卡 3D 资源,一次开发到处使用。

  6. 在小白面前装逼用



故事正题

首要任务就是将 Unity 项目导出来(已经做好了 3D 的处理,关于通信和动态加载在下面介绍)



敲黑板,重点 Export Project 一定要勾选,之后点击最下方的 Export 静等项目导出。



导出后的结构感觉好熟悉,就跟 Android Studio 的项目结构一样(PS:本来就是)打开 Studio 以 moudle 的形式导入 android 工程,第一次可能慢一些慢慢导,去喝杯茶。成功后重要的操作来了。打开刚才导入的 build.gradle 文件,首当其冲的就是 gradle 版本的修改,跟你的 studio 版本一致。


dependencies {    classpath 'com.android.tools.build:gradle:3.2.0'}
复制代码


我的是 3.2 Android Studio,推荐不低于它。

往下走可以找到


apply plugin: 'com.android.application'
复制代码


改为

apply plugin: 'com.android.library'
复制代码


因为我们要以 library 的形式集成,接着再往下面走就是熟悉的 sdkVsersion 了,保持和你的 anroid 项目一致。还有个 applicationId,删掉这个

有的项目遇见 UnityAds.aar 文件,不影响。其他修改以及遇到的一些坑不再赘述,有问题可以留言。我的如下:


// GENERATED BY UNITY. REMOVE THIS COMMENT TO PREVENT OVERWRITING WHEN EXPORTING AGAINbuildscript {    repositories {        google()        jcenter()    }    dependencies {        classpath 'com.android.tools.build:gradle:3.2.0'    }}allprojects {    repositories {        google()        jcenter()        flatDir {            dirs 'libs'        }    }}apply plugin: 'com.android.library'dependencies {    implementation fileTree(dir: 'libs', include: ['*.jar'])}android {    compileSdkVersion 29    compileOptions {        sourceCompatibility JavaVersion.VERSION_1_8        targetCompatibility JavaVersion.VERSION_1_8    }    defaultConfig {        minSdkVersion 21        targetSdkVersion 29        ndk {            abiFilters 'armeabi-v7a', 'x86'        }        versionCode 1        versionName '1.0'    }    lintOptions {        abortOnError false    }    aaptOptions {        noCompress = ['.unity3d', '.ress', '.resource', '.obb']    }    buildTypes {        debug {            minifyEnabled false            useProguard false            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-unity.txt'            jniDebuggable true        }        release {            minifyEnabled false            useProguard false            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-unity.txt'            signingConfig signingConfigs.debug        }    }    packagingOptions {        doNotStrip '*/armeabi-v7a/*.so'        doNotStrip '*/x86/*.so'    }}
复制代码


接着打开 Unity 项目的清单文件 AndroidManifest.xml,删减 application 节点,删除 intent-filter 节点,activity 增加内容 process(解决某某问题)


<application    //删减其他    android:banner="@drawable/app_banner"    android:isGame="true">    <activity        .....        //删除下面两行-否则造成桌面两个icon        //android:label="@string/app_name"        //android:launchMode="singleTask"        //增加这行        android:process="e.unity3d">        //删掉intent-filter        <!--<intent-filter>-->            <!--<action android:name="android.intent.action.MAIN" />-->            <!--<category android:name="android.intent.category.LAUNCHER" />-->            <!--<category android:name="android.intent.category.LEANBACK_LAUNCHER" />-->        <!--</intent-filter>-->        <meta-data            android:name="unityplayer.UnityActivity"            android:value="true" />    </activity> ......
复制代码


至此,配置完成,已经可以玩了。

但为了玩的顺畅,我们再增加一个自定义控件(1.用来解决 kill 问题 2.增强自己的扩展性)。自定义一个 java 文件集成 UnityPlayer(核心关键类)



public class MUnityPlayer extends UnityPlayer {    public MUnityPlayer(Context context) {        super(context);    }    @Override    protected void kill() {        //super.kill();        //unity默认一些返回操作等会直接kill掉进程,覆写kill方法,去掉super.kill, 不让他kill    }}
复制代码


配置完成,点击菜单栏的 Build,Rebuild Project unity 的 lib 项目中生成 aar 文件




Unity 导出的项目配置完成,配置自己的 Android 项目,首先将几个 lib......so 复制到你自己的项目 jniLibs 中。

然后在你需要集成的项目 build 文件中


implementation(name: 'XingFeiUnity', ext: 'aar')
复制代码


接着将 aar 复制的你的项目 libs 文件下,记得重命名删除后面的“-debug”,否则会出现找不到类的问题。

👉其他

📢作者:小空和小芝中的小空

📢转载说明-务必注明来源:https://www.infoq.cn/profile/DB2492B85795C4/publish

📢这位道友请留步☁️,我观你气度不凡,谈吐间隐隐有王者霸气💚,日后定有一番大作为📝!!!旁边有点赞👍收藏🌟今日传你,点了吧,未来你成功☀️,我分文不取,若不成功⚡️,也好回来找我。

发布于: 刚刚阅读数: 4
用户头像

芝麻粒儿

关注

尺有所短;寸有所长。 2020.08.29 加入

👑CSDN博客专家-华为云享专家-Android/Unity领域优质作者 🏅目前在模拟医学行业做Android/Unity双端开发 🏆微信公众号:【空名先生】 🏆QQ交流群:204918251或877807592

评论

发布
暂无评论
Android/Unity大乱斗-完整双方集成交互指南_android_芝麻粒儿_InfoQ写作社区