当前位置: 首页 > news >正文

【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: InitLog.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: LoginLog.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.打包测试,使用雷电模拟器测试

在这里插入图片描述

http://www.lryc.cn/news/306353.html

相关文章:

  • QYFB-02 无线风力报警仪 风速风向超限声光报警
  • css知识:盒模型盒子塌陷BFC
  • Nginx的反向代理:实现灵活的请求转发和内容缓存
  • 免费享受企业级安全:雷池社区版WAF,高效专业的Web安全的方案
  • 基于SpringBoot的航班进出港管理系统
  • Odoo系统安装部署并结合内网穿透实现固定域名访问本地ERP系统
  • 幻兽帕鲁(Palworld 1.4.1)私有服务器搭建(docker版)
  • 好书推荐丨细说Python编程:从入门到科学计算
  • 智慧城市与数字孪生:共创未来城市新篇章
  • Java数据结构---初识集合框架
  • Spring Cloud学习
  • 【计算机网络】1.4 接入网和物理媒体
  • 关于螺栓的基本拧紧技术了解多少——SunTorque智能扭矩系统
  • C# .Net 发布后,把dll全部放在一个文件夹中,让软件目录更整洁
  • [更新]ARCGIS之土地耕地占补平衡、进出平衡系统报备坐标txt格式批量导出工具(定制开发版)
  • todolist
  • 【Java程序设计】【C00307】基于Springboot的基Hadoop的物品租赁管理系统(有论文)
  • GIT中对子仓库的使用方法介绍
  • ClickHouse 指南(三)最佳实践 -- 跳数索引
  • Mybatis总结--传参二
  • 2024年数字化转型风口趋势大赏
  • 某款服务器插上4张TDP功耗75瓦PCIE卡无法开机的调试过程
  • 数据结构与算法——排序算法
  • 阿里巴巴alibaba API商品详情接口系列(商品属性,价格,主图)阿里巴巴alibaba根据ID取商品详情 API 返回值说明
  • lcd画圆
  • React组件详解
  • C++面试:内存溢出、内存泄漏的原因与解决
  • 【Java程序员面试专栏 算法思维】二 高频面试算法题:二分查找
  • kaldi 详细安装教程、PyTorch-Kaldi、TIMIT下载、Librispeech下载
  • EtherCAT 转 ModbusTCP 网关