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

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/403447.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

#LLM入门|Prompt#1.3_迭代优化_Iterative

有了任务想法后&#xff0c;可以先编写初版 Prompt&#xff0c;注意清晰明确并给模型充足思考时间。运行后检查结果&#xff0c;如果不理想&#xff0c;则分析 Prompt 不够清楚或思考时间不够等原因&#xff0c;做出改进&#xff0c;再次运行。如此循环多次&#xff0c;终将找到…

国际联合行动“克罗诺斯”成功打击LockBit勒索软件组织,基础设施遭查封

在一场旷日持久的执法行动中&#xff0c;美国联邦调查局(FBI)和其国际盟友终于成功打击了臭名昭著的网络犯罪团伙LockBit。通过名为“克罗诺斯”的联合执法行动&#xff0c;执法部门取得了阶段性的胜利&#xff0c;但与网络犯罪的斗争依然任重道远。 第一章 克罗诺斯行动的进展…

关于el-select值的回显问题 : 框内显示label值还是value值

<el-form-item label"状态" prop""><el-selectv-model"roleForm.state"class"m-2"size"large"style"width: 240px"placeholder"请选择状态"value-key"value"//value-key 与下面的ke…

【Python笔记-设计模式】适配器模式

一、说明 适配器模式是一种结构型模式&#xff0c;它使接口不兼容的对象能够相互合作 (一) 解决问题 主要解决接口不兼容问题 (二) 使用场景 当系统需要使用现有的类&#xff0c;但类的接口不符合需求时当需要一个统一的输出接口&#xff0c;但输入类型不可预知时当需要创…

使用openai-whisper实现语音转文字

使用openai-whisper实现语音转文字 1 安装依赖 1.1 Windows下安装ffmpeg FFmpeg是一套可以用来记录、转换数字音频、视频&#xff0c;并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案。 # ffmpeg官网 https://ffm…

React18源码: reconcliler启动过程

Reconcliler启动过程 Reconcliler启动过程实际就是React的启动过程位于react-dom包&#xff0c;衔接reconciler运作流程中的输入步骤.在调用入口函数之前&#xff0c;reactElement(<App/>) 和 DOM对象 div#root 之间没有关联&#xff0c;用图片表示如下&#xff1a; 在启…

多线程-day4

1>多线程完成文件拷贝 代码&#xff1a; #include<myhead.h>//参数结构体创建 typedef struct INFO {const char *srcfile;const char *destfile;int length; }Info;//定义获取文件长度的函数 int get_file_len(const char *srcfile,const char *destfile){int srcf…

C++秋招必知必会(常用排序算法)

参考引用 Hello 算法 常用排序算法 1. 选择排序 1.1 算法原理与流程 开启一个循环&#xff0c;每轮从未排序区间选择最小的元素&#xff0c;将其放到已排序区间的末尾设数组的长度为 n n n&#xff0c;选择排序的算法流程如下图 初始状态下&#xff0c;所有元素未排序&…

QEMU源码全解析 —— virtio(22)

接前一篇文章&#xff1a;QEMU源码全解析 —— virtio&#xff08;21&#xff09; 前几回讲解了virtio驱动的加载。本回开始讲解virtio驱动的初始化。 在讲解virtio驱动的初始化之前&#xff0c;先要介绍virtio配置的函数集合变量virtio_pci_config_ops。实际上前文书也有提到…

电脑亮度怎么调节?一文详解,亮度调整随心所欲!

在我们日常使用电脑的时候&#xff0c;屏幕亮度的合理调节是关乎舒适度和视觉体验的一项重要任务。无论是在白天面对明亮的阳光&#xff0c;还是在夜晚为了减少眼睛疲劳&#xff0c;灵活地调整电脑屏幕亮度&#xff0c;让其适应不同环境和个人需求&#xff0c;成为了提高工作效…

虚拟列表【vue】等高虚拟列表/非等高虚拟列表

文章目录 1、等高虚拟列表2、非等高虚拟列表 1、等高虚拟列表 参考文章1 参考文章2 <!-- eslint-disable vue/multi-word-component-names --> <template><divclass"waterfall-wrapper"ref"waterfallWrapperRef"scroll"handleScro…

vue里echarts的使用:画饼图和面积折线图

vue里echarts的使用,我们要先安装echarts,然后在main.js里引入: //命令安装echarts npm i echarts//main.js里引入挂载到原型上 import echarts from echarts Vue.prototype.$echarts = echarts最终我们实现的效果如下: 头部标题这里我们封装了一个全局公共组件common-he…

Spark: a little summary

转眼写spark一年半了&#xff0c;从之前写机器学习组件、做olap到后面做图计算&#xff0c;一直都是用的spark&#xff0c;惭愧的是没太看过里面的源码。这篇文章的目的是总结一下Spark里面比较重要的point&#xff0c;重点部分会稍微看一下源代码&#xff0c;因为spark是跟cli…

基于springboot+vue的靓车汽车销售网站(前后端分离)

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

Android中Transition过渡动画的简单使用

前些天发现了一个蛮有意思的人工智能学习网站,8个字形容一下"通俗易懂&#xff0c;风趣幽默"&#xff0c;感觉非常有意思,忍不住分享一下给大家。 &#x1f449;点击跳转到教程 一、布局xml文件代码如下&#xff1a; <?xml version"1.0" encoding&quo…

【ctfshow—web】——信息搜集篇1(web1~20详解)

ctfshow—web题解 web1web2web3web4web5web6web7web8web9web10web11web12web13web14web15web16web17web18web19web20 web1 题目提示 开发注释未及时删除 那就找开发注释咯&#xff0c;可以用F12来查看&#xff0c;也可以CtrlU直接查看源代码呢 就拿到flag了 web2 题目提示 j…

H5移动端文件预览pdf

H5移动端文件预览pdf 需求&#xff1a;H5页面嵌入浙政钉&#xff0c;需要文件预览Pdf。 试用了多个插件&#xff0c;踩了很多坑&#xff0c;如果小伙伴有类似填坑经历&#xff0c;并成功解决&#xff0c;感谢留言指点&#xff01;&#xff01;&#xff01; 先讲最终方案&#x…

[云原生] 二进制安装K8S(中)

书接上文&#xff0c;我们继续部署剩余的插件 一、K8s的CNI网络插件模式 2.1 k8s的三种网络模式 K8S 中 Pod 网络通信&#xff1a; &#xff08;1&#xff09;Pod 内容器与容器之间的通信 在同一个 Pod 内的容器&#xff08;Pod 内的容器是不会跨宿主机的&#xff09;共享…

VG5032VDN 电压控制的晶体振荡器 (VCXO) 输出:LVDS

在今天繁复多变的电子市场中&#xff0c;设计师不断寻求更稳定、更灵活的时钟解决方案&#xff0c;以满足从通信网络到工业控制系统的广泛应用。VG5032VDN VCXO是一款高性能的电压控制晶体振荡器 它结合了高性能、多用途性和紧凑设计&#xff0c;是一款适合广泛应用的晶体振荡…

玩主机游戏能省去不少烦恼?+主机该购买哪台?

文/嘉兰SK 来到次世代&#xff0c;玩家们最关心的问题逐渐变成了购买的游戏能否支持升级。 各个游戏厂商也没有闲着。 此前还有标准版、黄金版、终极版、决定版等一系列。 想出很多招数。 于是很多新玩家开始疑惑&#xff1a;你们都说玩主机游戏可以省去很多麻烦&#xff0c;可…