Unity3d与Android互相通信

2021-11-04  本文已影响0人  云深不知处a

1.准备工作 此处有ilcpp与Mono两种路径注意区分【unity版本2020.3.21f1c1】

-classes.jar
-UnityPlayerActivity.java


image.png
image.png image.png

2.把以上两个文件准备好,后面导入AS使用

image.png

【注意19版本的unity把UnityPlayerActivity分离了,不在classes.jar包里面了】


image.png

3.调整xml文件代码

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

    <application
        android:allowBackup="true"
        android:supportsRtl="true"
        >
        <activity android:name="com.gzzyy.androidtest.MainActivity"
            android:exported="true">
            <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>

4.编写MianActivity代码进行互相通信

image.png
package com.gzzyy.androidtest;
import com.unity3d.player.UnityPlayer;
import com.unity3d.player.UnityPlayerActivity;
import android.os.Bundle;
import android.widget.Toast;

public class MainActivity extends UnityPlayerActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
//        setContentView(R.layout.activity_main);
    }
//    //unity中要调用android的方法
//    public String SendMessage()
//    {
//
//        AndroidCallUnity();
//        return "Hello word";
//    }
//
//    //android调用unity方法
//    public void AndroidCallUnity(){
//        //第1个参数为Unity场景中用于接收android消息的对象名称
//        //第2个参数为对象上的脚本的一个成员方法名称(脚本名称不限制)
//        //第3个参数为unity方法的参数
//        Toast.makeText(this,"unity调用android成功", Toast.LENGTH_LONG).show();
//        UnityPlayer.UnitySendMessage("receiveObj", "UnityMethod", "This is args.");
//    }


    //unity调用Android
    public void UnityCallAndroid () {
        AndroidCallUnity();
        Toast.makeText(this,"unity调用android成功", Toast.LENGTH_LONG).show();
    }

    //android调用unity
    public void AndroidCallUnity () {

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

}

5.AS进行编译打包

image.png

6.编写unity代码

image.png
package com.gzzyy.androidtest;
import com.unity3d.player.UnityPlayer;
import com.unity3d.player.UnityPlayerActivity;
import android.os.Bundle;
import android.widget.Toast;

public class MainActivity extends UnityPlayerActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
//        setContentView(R.layout.activity_main);
    }
//    //unity中要调用android的方法
//    public String SendMessage()
//    {
//
//        AndroidCallUnity();
//        return "Hello word";
//    }
//
//    //android调用unity方法
//    public void AndroidCallUnity(){
//        //第1个参数为Unity场景中用于接收android消息的对象名称
//        //第2个参数为对象上的脚本的一个成员方法名称(脚本名称不限制)
//        //第3个参数为unity方法的参数
//        Toast.makeText(this,"unity调用android成功", Toast.LENGTH_LONG).show();
//        UnityPlayer.UnitySendMessage("receiveObj", "UnityMethod", "This is args.");
//    }


    //unity调用Android
    public void UnityCallAndroid () {
        AndroidCallUnity();
        Toast.makeText(this,"unity调用android成功", Toast.LENGTH_LONG).show();
    }

    //android调用unity
    public void AndroidCallUnity () {

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

}

7.unity Canvas上验证,创建一个button与text的UI并把AS导出的两个文件拖到图示的目录结构下方【请先操作完8,9两步骤】

image.png

8.【注意了导出的app-debug文件夹需要特殊处理】

9.重新整合成aar包

app-debug.aar为新文件名

C:\Users\Win\Desktop\app-debug 文件夹路径

末尾 / . 不要漏掉

C:\Users\Win\Desktop>jar cvf app-debug.aar -C C:\Users\Win\Desktop\app-debug/ .

此处操作完即为最终需要导入到unity中的包

要使用真机才能跑哦

上一篇 下一篇

猜你喜欢

热点阅读