Unity3d与Android互相通信

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文件代码




    
        
            
                
                
            
            
        
    


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文件夹需要特殊处理】

  • 删除下图内容


    image.png
  • 删除classes.jar文件


    image.png
  • 好压打开jar包删除两个文件


    image.png

    image.png

    image.png

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中的包

要使用真机才能跑哦

你可能感兴趣的:(Unity3d与Android互相通信)