【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.rhkb.cn/news/264242.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux:Jenkins用户权限和管理

1.下载插件 由于Jenkins的默认权限管理并不是很精细所以我们安装一个插件进行权限的一个管理 插件名称为&#xff1a;Role-based Authorization Strategy 安装完插件我们再去配置一下 进入全局安全配置 选择这个Role-Based Strategy策略然后保存 2.创建角色 我们这里主要使…

Odoo系统安装部署并结合内网穿透实现固定域名访问本地ERP系统

文章目录 前言1. 下载安装Odoo&#xff1a;2. 实现公网访问Odoo本地系统&#xff1a;3. 固定域名访问Odoo本地系统 前言 Odoo是全球流行的开源企业管理套件&#xff0c;是一个一站式全功能ERP及电商平台。 开源性质&#xff1a;Odoo是一个开源的ERP软件&#xff0c;这意味着企…

企微hook框架

https://wwm.lanzoum.com/ipUTp1ot1twh 密码:hvev 免费的企微框架 支持文本消息&#xff0c;图片消息&#xff0c;视频消息&#xff0c;文件消息。 其他可自行下载测试。 有兴趣可以进群交流。720192224 BOOL WxWorkSendData(string data) { WX_GETOBJDATA ob…

[C++]18:set和map的使用

set和map的使用 一.关联式容器&#xff1a;1.简单概念&#xff1a;2.<key , value>--->键值对3.set和map的底层结构&#xff08;平衡搜索树或者红黑树&#xff09; 二.set1.set (排序不重复)1.模板参数&#xff1a;2.set是一个有序存储的容器&#xff1a;3.set中每个数…

Vi/Vim 使用小窍门,如何消除搜索后的关键字高亮

Vim/Vi 基本上是 *nix 世界最受欢迎的编辑器了&#xff0c;不知道为什么&#xff0c;一直以来觉得和 Emacs 比起来&#xff0c;Vim 更加有亲和力。用起来很舒服。 今天就记录一个困扰了我很久的问题。 大家应该都知道&#xff0c;在 Vi 里面如果要搜索某个关键字&#xff0c;…

ChatGPT调教指南 | 咒语指南 | Prompts提示词教程(三)

在人工智能成为我们日常互动中无处不在的一部分的时代&#xff0c;与大型语言模型(llm)有效沟通的能力是无价的。“良好提示的26条原则”为优化与这些复杂系统的交互提供了全面的指导。本指南证明了人类和人工智能之间的微妙关系&#xff0c;强调清晰、专一和结构化的沟通方法。…

vscode输入英文时字体之间的间隔突然变大,似中文

vscode输入英文时字体之间的间隔突然变大&#xff0c;似中文 主要原因&#xff1a; 是由于输入法变成全角模式了。原因可能是不小心按了 shift空格键快捷键造成的。 正常情况&#xff0c;全角就是字母和数字等与汉字占等宽位置的字。 半角就是ASCII方式的字符&#xff0c;在没…

Sora:视频生成模型作为世界模拟器

我们探索了视频数据上生成模型的大规模训练。具体来说&#xff0c;我们在可变持续时间、分辨率和长宽比的视频和图像上联合训练文本条件扩散模型。我们利用了一个在视频和图像潜在码的时空块上操作的变压器架构。我们规模最大的模型 Sora 能够生成一分钟的高保真视频。我们的结…

第十四章 Linux面试题

第十四章 Linux面试题 日志t.log(访问量)&#xff0c; 将各个ip地址截取&#xff0c;并统计出现次数&#xff0c;并按从大到小排序(腾 讯) http://192. 168200.10/index1.html http://192. 168.200. 10/index2.html http:/192. 168 200.20/index1 html http://192. 168 200.30/…

c++学习记录 STL初识—vector存放内置数据类型

#include<iostream> using namespace std; #include<vector> #include<algorithm>//标准算法头文件//容器&#xff1a;vector //算法&#xff1a;for_each //迭代器&#xff1a;vector<int>::iteratorvoid myPrint(int val) {cout << val <&l…

微服务篇之分布式系统理论

一、CAP定理 1.什么是CAP 1998年&#xff0c;加州大学的计算机科学家 Eric Brewer 提出&#xff0c;分布式系统有三个指标&#xff1a; 1. Consistency&#xff08;一致性&#xff09;。 2. Availability&#xff08;可用性&#xff09;。 3. Partition tolerance &#xff0…

力扣 187. 重复的DNA序列

1.题目 DNA序列 由一系列核苷酸组成&#xff0c;缩写为 A, C, G 和 T.。 例如&#xff0c;"ACGAATTCCG" 是一个 DNA序列 。 在研究 DNA 时&#xff0c;识别 DNA 中的重复序列非常有用。 给定一个表示 DNA序列 的字符串 s &#xff0c;返回所有在 DNA 分子中出现不止一…

医院LIS(全称Laboratory Information Management System)系统源码

目录 一、医院LIS系统概况 二、医院LIS系统建设必要性 三、为什么要使用LIS系统 四、技术框架 &#xff08;1&#xff09;总体框架 &#xff08;2&#xff09;技术细节 &#xff08;3&#xff09;LIS主要功能模块 五、LIS系统优势 &#xff08;1&#xff09;客户/用户…

JAVA工程师面试专题-《Mysql》篇

目录 一、基础 1、mysql可以使用多少列创建索引&#xff1f; 2、mysql常用的存储引擎有哪些 3、MySQL 存储引擎&#xff0c;两者区别 4、mysql默认的隔离级别 5、数据库三范式 6、drop、delete 与 truncate 区别&#xff1f; 7、IN与EXISTS的区别 二、索引 1、索引及索…

构建SatelliteRpc:基于Kestrel的RPC框架(整体设计篇)

背景 之前在.NET 性能优化群内交流时&#xff0c;我们发现很多朋友对于高性能网络框架有需求&#xff0c;需要创建自己的消息服务器、游戏服务器或者物联网网关。但是大多数小伙伴只知道 DotNetty&#xff0c;虽然 DotNetty 是一个非常优秀的网络框架&#xff0c;广泛应用于各种…

二叉树高频题目(不含树形DP)

二叉树高频题 二叉树的层序遍历 . - 力扣&#xff08;LeetCode&#xff09; 按点弹出 class Solution { public:vector<vector<int>> levelOrder(TreeNode* root) {vector<vector<int>>ans;if(root!nullptr){queue<TreeNode*>q;unordered_map&…

遥感、航拍、影像等用于深度学习的数据集集合

遥感图像的纹理特征异常繁杂&#xff0c;地貌类型多变&#xff0c;人工提取往往存在特征提取困难和特征提取不准确的问题&#xff0c;同时&#xff0c;在这个过程中还会耗费海量的人力物力。随着计算力的突破、数据洪流的暴发和算法的不断创新&#xff0c;在具有鲜明“大数据”…

SpringBoot:自定义starter

点击查看&#xff1a;LearnSpringBoot08starter 点击查看&#xff1a;LearnSpringBoot08starterTest 点击查看更多的SpringBoot教程 一、主要流程 1. 先创建空的project 2. 打开空的project 结构 图选中model 点击 3. 创建 model&#xff08;Maven&#xff09;启动器 提…

Microsoft的PromptBench可以做啥?

目录 PromptBench简介 PromptBench的快速模型性能评估 PromptBench数据集介绍 PromptBench模型介绍 PromptBench模型加载遇到的问题 第一次在M1 Mac上加载模型 vicuna和llama系列模型 PromptBench各个模型加载情况总结 PromptBench的Prompt快速工程 chain of thought…

C++——二叉搜索树

二叉搜索树 二叉搜索树&#xff1a; 又为搜索二叉树&#xff0c;一般具有以下的性质 若它的左子树不为空&#xff0c;则左子树上所有的节点的值都小于父亲节点若它的右子树不为空&#xff0c;则右子树上所有的节点的值都大于父亲节点它的左右子树也都为二叉搜索树 二叉搜索树…