【Unity】Unity与安卓交互

问题描述

Unity和安卓手机进行交互,是我们开发游戏中最常见的场景。本教程将从一个简单的例子来演示一下。
本教程需要用到Android Studio2021.1.1

1.Android Studio新建一个工程

在这里插入图片描述

2.选择Empty Activity 然后点击Next

在这里插入图片描述

3.点击Finish完成创建在这里插入图片描述

4.选择File-New-New Module

在这里插入图片描述

5.创建一个Android Library

这个就是用来生成一个jar包的

在这里插入图片描述

5.创建成功后,会看到刚刚创建的mylibrary和下面的build.gradle

不同视窗排版不一样,自己调整一下
在这里插入图片描述

6.找到Unity的classes.jar,在安装目录下

比如我的目录:C:\Program Files\Unity\Hub\Editor\2021.3.33f1c1\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\il2cpp\Release\Classes
注意选择自己需要的版本
在这里插入图片描述

7.拷贝到Android Studio项目中的Libs下

请添加图片描述

8.右键选择Add As Library

请添加图片描述

9.在src的main目录下,右键新增一个JavaGame脚本

在这里插入图片描述

10.加入以下测试脚本

package com.hao.mylibrary;
import android.util.Log;
import com.unity3d.player.UnityPlayer;

public class JavaGame
{
   
    //初始化
    public static void Init()
    {
   
        // 打印: JavaGame: Init
        Log.d("JavaGame", "Init");
    }

    //获取渠道
    private String GetChannel()
    {
   
        Log.d("JavaGame", "GetChannel");
        return "xiaomi";
    }

    //加法
    public int Add(int num1,int num2)
    {
   
        Log.d("JavaGame", "Add");
        return num1 + num2;
    }

    //登录
    public static void Login()
    {
   
        // 打印: JavaGame: Login
        Log.d("JavaGame", "Login");

        UnityPlayer.UnitySendMessage("UnityObj", "LoginSucceed", "abc12345");
    }
}

11.打开build.gradle,添加以下打包代码

task makeJar(type: Copy) {
   
    //删除存在的
    delete 'build/libs/testlibrary.jar'
    //设置拷贝的文件
    from('build/intermediates/aar_main_jar/release/')
    //打进jar包后的文件目录
    into('build/libs/')
    //将classes.jar放入build/libs/目录下
    //include ,exclude参数来设置过滤
    include('classes.jar')
    //重命名
    rename ('classes.jar', 'testlibrary.jar')

}

makeJar.dependsOn(build)

在这里插入图片描述

12.在右侧找到Gradle,选择项目中的Tasks - other - makeJar,双击makeJar开始打包

在这里插入图片描述

13.提示打包成功后,可在Build中的Libs下找到jar包

在这里插入图片描述

14.拷贝到Unity工程Plugins/Android目录下

在这里插入图片描述

15.在Unity里新建一个Game.cs脚本,加入以下测试代码

using UnityEngine;
using UnityEngine.UI;
public class Game : MonoBehaviour
{
   
    public Text ChannelText;
    public Text AddText;
    void Start()
    {
   
        AndroidJavaObject javaObject = new AndroidJavaObject("com.hao.mylibrary.JavaGame");
        // 静态方法
        javaObject.CallStatic("Init");
 
        // 非静态无参方法,返回一个渠道名
        string Channel = javaObject.Call<string>("GetChannel");
        ChannelText.text = Channel;
         
        // 非静态,带参数方法
        int num = javaObject.Call<int>("Add", 2,6);
        AddText.text = num.ToString();
      
        //调用登录,登录成功会返回
        javaObject.CallStatic("Login");

    }
}

16.在Unity里新建一个UnityObj.cs脚本,并且挂在 UnityObj对象上 。

UnityObj必须要和java里的名称一致,不然Unity就接收不到java的返回

using UnityEngine;
using UnityEngine.UI;
public class UnityObj : MonoBehaviour
{
   
    public Text mText;
    private void LoginSucceed(string value)
    {
   
        mText.text = value;
         
    }
}

在这里插入图片描述

17.为了方便测试,建了一个简单UI,把返回结果直接显示在UI上。

在这里插入图片描述

18.打包测试,使用雷电模拟器测试

在这里插入图片描述

相关推荐

  1. 交叉编译——ndk

    2024-02-23 15:20:02       39 阅读
  2. 苹果区别】详细讲解

    2024-02-23 15:20:02       39 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-23 15:20:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-23 15:20:02       100 阅读
  3. 在Django里面运行非项目文件

    2024-02-23 15:20:02       82 阅读
  4. Python语言-面向对象

    2024-02-23 15:20:02       91 阅读

热门阅读

  1. ByteTrack算法原理解析

    2024-02-23 15:20:02       39 阅读
  2. C++11 Thead线程库的基本使用

    2024-02-23 15:20:02       52 阅读
  3. k8s的pod调度之节点选择器

    2024-02-23 15:20:02       42 阅读
  4. 在Ubuntu等linux系统中用wget下载的方法

    2024-02-23 15:20:02       55 阅读
  5. ChatGPT法律咨询提示

    2024-02-23 15:20:02       42 阅读
  6. 【PostgreSQL】PostgreSQL详细介绍

    2024-02-23 15:20:02       60 阅读
  7. 代码随想录算法训练营29期Day58|LeetCode 392,155

    2024-02-23 15:20:02       48 阅读
  8. pytest+yaml【接口测试框架】需要解决的问题:

    2024-02-23 15:20:02       45 阅读
  9. 设计模式-单例模式(Singleton Pattern)

    2024-02-23 15:20:02       48 阅读