『Android』Android与Unity通信【图文详细】

2,130 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第12天,点击查看活动详情

👨‍🎓作者简介:一位喜欢写作,计科专业的大三菜鸟

🏡个人主页:starry陆离 的个人主页

如果文章有帮到你的话记得点赞👍+收藏💗支持一下哦


通过导入Unity的classes.jar,继承unity的UnityPlayerActivity实现unity与安卓的交互

🍁安卓

1.创建一个安卓空项目

我将其更名为unitytoandroid

记住选择的API等级,在unity中会用到,如图我用的是API21,Android5.0

image-20220217102247362

创建好后,as默认打开是在Android结构下

image-20220217102742514

我们将其切换到Project结构目录下

image-20220217102831029

2.导入classes.jar

  1. 导入unity的jar包

    在unity的安装目录下找到classes.jar文件,并将其复制到as的libs文件下D:\Unity\UntiyDownLoad\2020.3.26f1c1\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Classes

    image-20220217102620158

    image-20220217102943087

  2. 右键classes.jar,选择add as library,点击ok,完成classes.jar文件的导入

    image-20220211164018034

3、编写MainActivity

在MainActivity中编写通信代码,如果显示没有UnityPlayerActivity,则在unity的安装目录下D:\Unity\UntiyDownLoad\2020.3.26f1c1\Editor\Data\PlaybackEngines\AndroidPlayer\Source\com\unity3d\player找到UnityPlayerActivity.java这个类,这是因为在2019版以后的unity中UnityPlayerActivity.java不再放在classes.jar中

image-20220217103220449

image-20220217103308012

找到这个类之后将其放在com.example.unitytoandroid包目录下,与MainActivity同级

image-20220217103421838

这样就不会再出现报错

image-20220217103611537

然后在MainActivity中编写通信代码,

 package com.example.unitytoandroid;
 ​
 import androidx.appcompat.app.AppCompatActivity;
 ​
 import android.os.Bundle;
 import android.util.Log;
 ​
 public class MainActivity extends UnityPlayerActivity {
 ​
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
 ​
     }
     
     //在unity中调用的测试方法,负责打印从unity中传来的字符串
     public void TestAndroid(String val){
         Log.i("unity",val);
     }
 }

4、src文件

把src文件下的所有文件删除,打开AndroidManifest.xml文件,删除当中的报错代码,有时也不会报错但也要删除否则在unity中运行时也会报错,删除后AndroidManifest.xml文件代码应如下

image-20220211173424089

删除后AndroidManifest.xml文件中应该只有两行代码

image-20220211192743089

5、build.gradle文件

有三处要改

1、 将plugins { id 'com.android.application' }更改为

 plugins {
     id 'com.android.library'
 }

2、 并且删除applicationId "com.example.unitytoandroid"

3、 修改implementation files('libs\classes.jar')为compileOnly files('libs\classes.jar')

 compileOnly files('libs\classes.jar')

6、Rebuild Project

在上方工具栏找到Build->Rebuild project,成功运行出来,我们便得到了aar文件

image-20220211173924850

🍀Unity

1、创建一个unity项目

创建一个Unity项目将其切换到安卓平台

image-20220217105703285

2、添加app-debug.aar文件

把app-debug.aar文件添加到unity中,并将其解压获取AndroidManifest.xml文件,同样放在同级文件下

如果电脑没有解压aar格式的软件,可以复制一份aar文件,更改后缀名为zip然后解压,取出AndroidManifest.xml文件,双击打开可以查看AndroidManifest.xml文件里的内容

image-20220217110111312

image-20220211184245572

image-20220217110001269

3、创建一个UI按钮

在unity中创建一个UI按钮,并编写一个脚本

image-20220217110412465

image-20220217110459804

 using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
 ​
 public class Test : MonoBehaviour
 {
     // Start is called before the first frame update
     void Start()
     {
         
     }
 ​
     // Update is called once per frame
     void Update()
     {
         
     }
 ​
     public void TestAndroid()
     {
         AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
         AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
         jo.Call("TestAndroid", "this is unity");
     }
 }
 ​

将脚本挂在Button上

image-20220211192443683

4、在unity里build

build之前要确保unity中API的等级设置要与AS中的一样

image-20220211192549245

🌺运行

在手机上点击按钮,as中弹出提示,标识通信成功

image-20220217110953352

🍁每日推荐:基础算法无论在研究生面试还是求职面试都是十分重要的一环,这里推荐一款算法面试神器:牛客网-面试神器;算法题只有多刷勤刷才能保持思路与手感,大家赶紧行动起来吧(温馨提示:常见的面试问答题库也很nice哦)