Android Studio 和 Unity 之间实现代码交互aar模式

 

关注下面的订阅号免费查看完整版,完整版更详细哦!!

 

 

 

本文主要介绍的是AS 和 Unity 之间如何通信。AS 和 Unity 之间通信有两种方法先介绍如下:

1、将 Unity 项目导出为Android工程,然后在Android Studio(以后简称为AS)中进行二次开发,添加扩展功能。这样的方式开发起来很灵活,改动起来也很方便,但是就是很麻烦,因为每次改动都要打一回安卓工程。

2、将AS中的扩展功能制作成 Android 库文件(jar包或者aar),然后将jar/aar包导入到 Unity 中直接使用,这样的方式使用者无法修改这个库文件的功能,但也更便于使用 。

下面我将分两步介绍如何利用第二种方法实现AS 和 Unity 之间的通信

第一部分AS 需要做的工作

1.创建正常 AS 库工程

首先创建一个AS 项目

 

然后修改创建好的应用为库编译模式需要修改的点如下:

 

  1. build.gradle文件修改

 

 

  1. Unity classes.jar拷贝到项目中libs文件夹中

 

找到安装的Unity文件夹,找到 途中的的classes.jar,然后将jar放到项目中libs目录下,另外Unity中有mono和il2cpp两个文件夹,这两个文件夹下都有classes.jar,具体选用大家要看你们unity 中playerSettings 中的配置

 

 

 

 

 

注意:build.gradle中的 target api 要和player setting中的要一致否则也会报错

要么选自动,要选具体的API值就要和build.gradle中的 target api一致

 

 

 

然后进行导入和设置编译范围

选中刚粘贴的classes.jar文件,右键,选择 Add as Library,出现一个弹窗口,选中自己的库模块后直接点确定

 

classes.jar 编译范围设置

 

 

 

设置后目录列如下:

 

  1. 删除AS 项目中res中的资源,否则Unity编译会报错

 

 

 

 

 

以上图片选中的均删除掉即可

 

 

  1. AndroidManifest.xml修改

将项目中的AndroidManifest.xml修改成如下格式即可,label,包名和activity名字用自己就可以,不一定一样只要字段都一样就行,字段值不一定一样

 

2 AS中代码添加

import android.content.Intent;

import android.util.Log;

import android.widget.Toast;

import android.os.Bundle;

import com.unity3d.player.UnityPlayer;

import com.unity3d.player.UnityPlayerActivity;

 

public class MainActivity extends UnityPlayerActivity {

 

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

 

}

 

//Unity 调用 Android

public void UnityCallAndroid (int a,String str) {

 

Toast.makeText(this,"unity调用android成功 a=="+a+" str=="+str, Toast.LENGTH_LONG).show();

 

AndroidCallUnity(a,str);

}

 

//Android 调用 Unity

public void AndroidCallUnity (int a,String str) {

 

//第1个参数为Unity场景中用于接收 Android 消息的对象名称

//第2个参数为对象上的脚本的一个成员方法名称(脚本名称不限制)

//第3个参数为unity方法的参数

Toast.makeText(this,"Android 调用 Unity 成功", Toast.LENGTH_LONG).show();

UnityPlayer.UnitySendMessage(" receiveObj", "UnityMethod", "This is args a="+a+" str="+str);

}

 

}

第二部分Unity的实现

1.将AS中编译的aar放到如下图中的文件夹

其中,AndroidManifest.xml 是从aar中解压出来的,具体方法是将编译出来的aar拷贝一份然后,改后缀为 zip文件后解压,拉出AndroidManifest.xml,然后再将AndroidManifest.xml,aar一起放到在Asset下新建的Plugins/Android文件夹下

 

 

 

 

2.创建一个Panel,里面放一个Image或者Button 和 Text

Image或者Button 名字要和如下方法的第一个参数名字要一致,可以自己自定义名字,我用的是receiveObj和UnityMethod

UnityPlayer.UnitySendMessage(" receiveObj(自定定义)", "UnityMethod(自已定义)", "This is args a="+a+" str="+str(自己的参数));

3.给Image或者Button 挂载C# 脚本与AS交互

挂在详情我就不写了,这个比较简单直接拖动就可以了

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

using UnityEngine.UI;

 

public class SDKTest : MonoBehaviour

{

private AndroidJavaClass jc;

private AndroidJavaObject jo;

public Text text;

// Start is called before the first frame update

void Start()

{

//这两行是固定写法

jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");

jo = jc.GetStatic<AndroidJavaObject>("currentActivity");

}

 

//Unity 调用 Android 中的方法 UnityCallAndroid,

//将其方法绑定在Unity中的Button或者Image上,点击Button和Image就实现交互了

public void OnBtnClickHandler()

{

jo.Call("UnityCallAndroid",100,"Hello Unity");

}

 

// 被Android中AndroidCallUnity调用

public void UnityMethod(string str)

{

Debug.Log("UnityMethod被调用,参数:" + str);

text.text = str;

}

脚本挂载

 

最后就可以打包运行了,将编译出来的apk 安装到Android手机上看看运行效果,不能直接在 Unity 上跑哦,必须在手机上跑哦!!!!

 

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值