Unity与Android交互通信

Unity与Android交互通信

软件版本

Android Studio4.0
在这里插入图片描述
Unity2019.3.12f1 (64-bit)
在这里插入图片描述

一.制作jar文件

1.1 新建Android Studio工程

1.1.1 打开Android Studio 点击 File -> New -> New Project
在这里插入图片描述
1.1.2 选择Empty Activity -> Next
在这里插入图片描述
1.1.3 填写项目名称及包名,其中Minimum SDK最好和Unity中最低版本设置的一致
在这里插入图片描述

1.2 添加Modules

1.2.1 打开Project Structure 点击File -> Project Structure
在这里插入图片描述
1.2.2 左侧菜单栏选择 Modules 右侧点击"+" 选择 Android Library -> Next
在这里插入图片描述在这里插入图片描述
1.2.3 填写参数Module name 和 Package name Minimum SDK 一定要和Unity的项目保持一致,填写完成后点击Finish
在这里插入图片描述
1.2.4 添加成功后可在Project Structure -> Modules 查看当前选中Module的Compile SDK Version 及 Build Tools Version 设置完成后 点击Apply -> OK

1.2.5 添加Library成功后可在项目目录中看到与APP同级文件夹

1.3 添加Unity包到Android Studio工程

1.3.1 打开Unity安装目录,\Unity\2019.3.12f1\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Classes(注意选择mono路径还是il2cpp路径下的Classes.jar取决于unity中project Setting -> Player -> Other Settings -> Configuration -> Scripting Backend)

1.3.2 将Unity目录下的Classes.jar 拷贝到 Android Studio中新建的module中的libs文件夹中

1.3.3 拷贝后右键点击libs/Classes.jar文件 选择As a Library -> OK

1.4添加Unity和安卓通信类(UnityPlayerActivity.java)

1.4.1 将Unity安装目录,unity\Editor\Data\PlaybackEngines\AndroidPlayer\Source\com\unity3d\player中的UnityPlayerActivity.java拷贝到(modulename)\main\java(packagename)中.
在这里插入图片描述
1.4.2 修改UnityPlayerActivity.java文件

添加

import com.unity3d.player.IUnityPlayerLifecycleEvents;  
import com.unity3d.player.UnityPlayer;

1.4.3 添加交互Activity

在(module name)\main\java(package name)下新建一个Empty Activity
右键点击包名文件夹 -> New -> Activity -> Empty Activity
在这里插入图片描述
设置 Activity Name为MainActivity
勾选 Generate Layout File
设置Package name和添加module时候的package name一致
点击finish
在这里插入图片描述
1.4.4 编写MainActivity

package (包名);


import android.widget.Toast;
import android.os.Bundle;
import com.unity3d.player.UnityPlayer;
public class MainActivity extends UnityPlayerActivity  {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    //unity调用Android
    public void UnityCallAndroid () {

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

        AndroidCallUnity();
    }
    public void AndroidCallUnity () {

        //第1个参数为Unity场景中用于接收android消息的对象名称
        //第2个参数为对象上的脚本的一个成员方法名称(脚本名称不限制)
        //第3个参数为unity方法的参数
        UnityPlayer.UnitySendMessage("receiveObj", "UnityMethod", "This is args.");
    }

}

1.4.5 修改AndroidManifest.xml

修改module中的修改AndroidManifest.xml
在这里插入图片描述

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="(packagename)">

    <application>

        <!-- 这个android:name的值必须为包名+类名-->
        <activity android:name="(packagename).MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>

            <!-- 这一行不能少,否则会闪退-->
            <meta-data android:name="unityplayer.UnityActivity" android:value="true" />
        </activity>
    </application>


</manifest>

1.5 build.gradle文件

1.5.1 修改build.gradle文件
注意 修改的build.gradle文件是module中的build.gradle文件 位置应该在(module name)\build.gradle
在这里插入图片描述
在文件中添加

//----------------这是一组将module导出为jar的gradle命令-------------------
task deleteOldJar(type: Delete) {
    delete 'release/AndroidPlugin.jar'
}

//task to export contents as jar
task exportJar(type: Copy) {
    from('build/intermediates/aar_main_jar/release/') 
    into('release/')
    include('classes.jar')
    ///Rename the jar
    rename('classes.jar', 'AndroidPlugin.jar')
}

exportJar.dependsOn(deleteOldJar, build)
//------------命令结束------------------------------

注意:在这里插入的代码from(‘build/intermediates/aar_main_jar/release/’)的路径参数和Android Studio的版本有关 每个不同的Android Studio版本都会不同

1.5.2 运行build.gradle

点击View -> Tool Windows -> Gradle
在这里插入图片描述
选择(Project name) -> 右键点击(module name)选择Reimport Gradle Project -> Tasks -> other ->点击exportJar
在这里插入图片描述在这里插入图片描述
会在目录(module name)/release/下生成AndroidPlugin.jar文件

二、Unity工程

2.1新建Unity项目

2.1.1 新建unity项目,并在Assets目录下创建Plugin/Android/bin目录

2.2.2 将Android项目中(module name)/src/AndroidManifest.xml文件拷贝到unity项目中Assets/Plugins/Android目录下

2.2.3 将Android项目中(module name)/release目录下AndroidPlugin.jar文件拷贝到unity项目中Assets/Plugins/Android/bin目录下
在这里插入图片描述

2.2 制作Scene

2.2.1 创建Canvas对象并在Canvas对象下创建Empty并命名为"receiveObj"(该名称和Android项目中MainActivity
UnityPlayer.UnitySendMessage("receiveObj", "UnityMethod", "This is args.");第一个参数相对应
)
在这里插入图片描述

2.2.2 创建脚本

脚本内容如下

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class Android2UnityTest : MonoBehaviour
{
    public Button btn;
    public Text text;
    private AndroidJavaClass jc;
    private AndroidJavaObject jo;
    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        
    }

    private void Awake()
    {
        //这两行是固定写法
        jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
        jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
        text.text += "In Awake \n";
        btn.onClick.AddListener(OnBtnClickHandler);
    }
    private void OnBtnClickHandler()
    {
        //调用Android中的方法UnityCallAndroid
        jo.Call("UnityCallAndroid");
        text.text += "In OnBtnClickHandler \n";
    }
    /// <summary>
    ///  被Android中AndroidCallUnity调用
    /// </summary>
    /// <param name="str"></param>
    public void UnityMethod(string str)
    {
        Debug.Log("UnityMethod被调用,参数:" + str);
        text.text += "In UnityMethod \n";
        text.text = str;
    }


}


三、打包项目

3.1.1 Unity配置 Project Settings -> Player -> Player 设置CompanyName 与 ProductName
在这里插入图片描述
3.1.2 配置Other Settings -> Identification -> Package Name 设置与module中的包名(package name)一致 Minimum API Level与module中的Min SDK Version一致
在这里插入图片描述
3.1.3 配置 Publishing Settings -> Build 勾选Custom Main Manifest
在这里插入图片描述
3.2.1 配置后build生成APK 真机运行即可

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值