Unity与Andriod的交互

Unity与安卓的信息交互


这次分享的不同于传统的方式AndroidJavaClass("com.unity3d.player.UnityPlayer")
如果是新手的话,请看 交互新手教程

在这里插入图片描述
在这里插入图片描述

这里讲的是在Unity中调用java代码,或者在unity中传参到java中,在Java代码中运行。

以下是在Java中的代码

public class UnitySdk {private final String TAG = "sdkcall";private static final class MInstanceHolder{static final UnitySdk mInstance = new UnitySdk();}public static UnitySdk getInstance() { return MInstanceHolder.mInstance; }private UnitySdk() {UnityPlayer mPlayer;try {ArrayList<Class<?>> clsList = new ArrayList<Class<?>>();Class<?> cls = UnityPlayer.currentActivity.getClass();clsList.add(cls);cls = cls.getSuperclass();while (cls != null) {clsList.add(cls);cls = cls.getSuperclass();}mPlayer = null;for (Class<?> c : clsList) {Field[] flds = c.getDeclaredFields();for (Field fld : flds) {if (UnityPlayer.class.equals(fld.getType())) {fld.setAccessible(true);mPlayer = (UnityPlayer) fld.get(UnityPlayer.currentActivity);break;}}}OnInit();} catch (Throwable t) {Log.i(TAG, "mPlayer=" + t);return;}Log.i(TAG, "add mPlayer=" + mPlayer);}public Activity activity(){return UnityPlayer.currentActivity;}private void OnInit(){Log.i(TAG, "OnInit: 初始化成功");}public int Getint(){return 520;}public String Getstring(){return "这个是个字符串信息";}public void LogIntPram(int _int){Log.i(TAG, "LogIntPram: "+_int);String str = Integer.toString(_int);Toast.makeText(activity(),str,Toast.LENGTH_LONG).show();}public void LogStringPram(String _str){Log.i(TAG, "LogStringPram: "+_str);Toast.makeText(activity(),_str,Toast.LENGTH_LONG*2).show();}
}

构建一个UnitySdk,方便在Unity中调用,而不是使用Unity自带的UnityPlayer类,在构造函数函数中,调用com.unity3d.player.UnityPlayer。将UnitySdk至为单例类。可在函数中对其他的一些方法,或自定义方法调用。
*


Unity中设置

将Android studio中打好的jar包,加载到Unity中,路径为:Plugins/Android/libs
在这里插入图片描述
在这里插入图片描述
在Unity中,将调用java的方法统一管理到Sdkmgr中。

public class Sdkmgr : MonoBehaviour
{private static AndroidJavaObject mainObject;private static Sdkmgr instance = null;public static Sdkmgr Instance{get{if (instance == null){instance = GameObject.Find("mgr").AddComponent<Sdkmgr>();}return instance;}}private void Awake(){
#if !UNITY_EDITOR && UNITY_ANDROIDDebug.Log("调用Awake");var mainClass = new AndroidJavaClass("com.wzt.sdkcall.UnitySdk");mainObject = mainClass.CallStatic<AndroidJavaObject>("getInstance");
#endif}public int GetInt(){
#if UNITY_EDITORreturn 0;
#elif UNITY_ANDROIDreturn mainObject.Call<int>("Getint");
#endif}public string GetString(){
#if UNITY_EDITORreturn "";
#elif UNITY_ANDROIDreturn mainObject.Call<string>("Getstring");
#endif}public void LogInt(int num){if (mainObject != null){Debug.Log(num);mainObject.Call("LogIntPram", num);}}public void LogString(string str){if (mainObject != null){Debug.Log(str);mainObject.Call("LogStringPram", str);}}
}

在业务逻辑中调用代码:

 void OnbtnIntClick(){txtContent.text = Sdkmgr.Instance.GetInt().ToString();}void OnbtnStrClick(){txtContent.text = Sdkmgr.Instance.GetString();}void OnbtnLogintClick(){Sdkmgr.Instance.LogInt(89);}void OnbtnLogstrClick(){Sdkmgr.Instance.LogString("这是一掉信息的!");}

效果图

Demo演示


在这里插入图片描述

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

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

相关文章

VUE之旅—day2

文章目录 Vue生命周期和生命周期的四个阶段created应用—新闻列表渲染mounted应用—进入页面搜索框就获得焦点账单统计&#xff08;Echarts可视化图表渲染&#xff09; Vue生命周期和生命周期的四个阶段 思考&#xff1a; 什么时候可以发送初始化渲染请求&#xff1f;&#xff…

【董晓算法】动态规划之背包DP问题(2024.5.11)

前言&#xff1a; 本系列是学习了董晓老师所讲的知识点做的笔记 董晓算法的个人空间-董晓算法个人主页-哔哩哔哩视频 (bilibili.com) 动态规划系列 【董晓算法】动态规划之线性DP问题-CSDN博客 01背包 步骤&#xff1a; 分析容量j与w[i]的关系&#xff0c;然后分析是否…

一种请求头引起的跨域问题记录(statusCode = 400/CORS)

问题表象 问题描述 当我们需要在接口的headers中添加一个自定义的变量的时候&#xff0c;前端的处理是直接在拦截器或者是接口配置的地方直接进行写&#xff0c;比如下面的这段比较基础的写法&#xff1a; $http({method: "post",url:constants.backend.SERVER_LOGIN…

fl studio试用版文件保存无法打开??一个方法教你免费打开!

前言 当下&#xff0c;各款编曲软件五花八门&#xff0c;而这其中最有声誉的必为FL Studio莫属 这个软件呢国人习惯叫他水果&#xff0c;拥有强大的录音、编曲、混音等功能&#xff0c;所以广受音乐圈欢迎。如今&#xff0c;大部分水果一旦有编曲所需&#xff0c;一般都要使用…

软考中级-软件设计师 (十一)标准化和软件知识产权基础知识

一、标准化基础知识 1.1标准的分类 根据适用的范围分类&#xff1a; 国际标准指国际化标准组织&#xff08;ISO&#xff09;、国际电工委员会&#xff08;IEC&#xff09;所制定的标准&#xff0c;以及ISO所收录的其他国际组织制定的标准。 国家标准&#xff1a;中华人民共和…

数字化档案真能永久保存吗

数字化档案可以长期保存&#xff0c;但不能永久保存。虽然数字化技术可以提供更好的保存手段和更方便的存取方式&#xff0c;但数字化档案仍然面临一些挑战和风险。 首先&#xff0c;数字化档案需要依赖特定的技术和设备进行读取和处理。如果这些技术和设备过时或无法使用&…

类和对象的特性

1.检查错误。 代码&#xff1a; #include <iostream>using namespace std;class Time { private:/* data */ public:Time(/* args */);~Time();void set_time(void);void show_time(void);int hour;int minute;int sec; };Time::Time(/* args */) { }Time::~Time() { }T…

没有疯狂内卷的日本智能机市场,小屏与设计仍旧是主流

如果聊起国内的智能机市场&#xff0c;我想大多数人的印象就是疯狂内卷。卷影像、卷屏幕、卷快充、卷性能……客观地说&#xff0c;国内的3C产品还是很有质价比的。不过在没有如此内卷的日本市场&#xff0c;各种小屏手机仍旧是主流。 除了苹果外&#xff0c;日本本土品牌的夏普…

西南大学计算机考研,选学硕还是专硕?西南大学计算机考研考情分析!

西南大学&#xff08;Southwest University&#xff09;是教育部直属&#xff0c;教育部、农业农村部、重庆市共建的重点综合大学&#xff0c;是国家首批"双一流"建设高校&#xff0c;"211工程"和"985工程优势学科创新平台"建设高校。现任党委书…

26 分钟惊讶世界,GPT-4o 引领未来人机交互

前言 原文链接&#xff1a;OpenAI最新模型——GPT-4o&#xff0c;实时语音视频交互&#xff0c;未来人机交互近在眼前 - Kaiho小站 北京时间 5 月 14 日凌晨&#xff0c;OpenAI 发布新一代模型——GPT-4o&#xff0c;仅在 ChatGPT 面世 17 个月后&#xff0c;OpenAI 再次通过…

函数栈帧的创建和销毁(详细理解)

&#x1f381;个人主页&#xff1a;我们的五年 &#x1f50d;系列专栏&#xff1a;c语言课程学习 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 目录 问题&#xff1a; 1.ebp&#xff0c;esp两个寄存器用来维护函数栈帧 2.main函数也一个函数&#…

2024kali linux上安装java8

1 kali下载Java 8安装包 访问Oracle官网或其他可信的Java下载站点&#xff0c;如华为云的开源镜像站&#xff08;例如&#xff1a;https://repo.huaweicloud.com/java/jdk/8u202-b08/jdk-8u202-linux-x64.tar.gz&#xff09;。 确保下载的是与你的Kali Linux系统架构&#xf…