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_ANDROID
        Debug.Log("调用Awake");
        var mainClass = new AndroidJavaClass("com.wzt.sdkcall.UnitySdk");
        mainObject = mainClass.CallStatic<AndroidJavaObject>("getInstance");
#endif
    }

    public int GetInt()
    {
#if UNITY_EDITOR
        return 0;
#elif UNITY_ANDROID
        return mainObject.Call<int>("Getint");
#endif
    }
    public string GetString()
    {
#if UNITY_EDITOR
        return "";
#elif UNITY_ANDROID
        return 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演示


在这里插入图片描述

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

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

相关文章

css画三角形

使用border div {border-top: 50px solid yellowgreen;border-bottom: 50px solid deeppink;border-left: 50px solid bisque;border-right: 50px solid chocolate; }如果想要单个的三角形&#xff0c;把其它三边的颜色设为transparent即可 使用 conic-gradient 绘制三角形 …

ADS FEM 仿真设置

1、EM Simulator 选择FEM。 2、在layout界面打开的EM功能&#xff0c;这里不需要操作。 3、Partitioning 不需要操作。 4、没有叠层的话需要新建&#xff0c;过孔可以在叠层处右键添加。 5、端口需要设置GND layer。 6、设置仿真频率。 7、Output plan。 8、Options 设置 介质…

低空经济:无人机竞赛详解

无人机竞赛市场近年来呈现出蓬勃发展的态势&#xff0c;其市场价值不仅体现在竞赛本身&#xff0c;还体现在推动无人机技术创新、拓展应用场景以及促进产业链发展等多个方面。 一、比赛项目介绍 无人机竞赛通常分为多个项目&#xff0c;包括竞速赛、技巧赛、航拍赛等。每个项目…

LeetCode494:目标和

题目描述 给你一个非负整数数组 nums 和一个整数 target 。 向数组中的每个整数前添加 ‘’ 或 ‘-’ &#xff0c;然后串联起所有整数&#xff0c;可以构造一个 表达式 &#xff1a; 例如&#xff0c;nums [2, 1] &#xff0c;可以在 2 之前添加 ‘’ &#xff0c;在 1 之…

GPT-4o:全面深入了解 OpenAI 的 GPT-4o

GPT-4o&#xff1a;全面深入了解 OpenAI 的 GPT-4o 关于 GPT-4o 的所有信息ChatGPT 增强的用户体验改进的多语言和音频功能GPT-4o 优于 Whisper-v3M3Exam 基准测试中的表现 GPT-4o 的起源追踪语言模型的演变GPT 谱系&#xff1a;人工智能语言的开拓者多模式飞跃&#xff1a;超越…

优秀博士学位论文分享:复杂场景下高精度有向目标检测的研究

优秀博士学位论文代表了各学科领域博士研究生研究成果的最高水平&#xff0c;本公众号近期将推出“优秀博士学位论文分享”系列文章&#xff0c;对人工智能领域2023年优秀博士学位论文进行介绍和分享&#xff0c;方便广大读者了解人工智能领域最前沿的研究进展。 “博士学位论…

牛客热题:二叉树与双向链表

&#x1f4df;作者主页&#xff1a;慢热的陕西人 &#x1f334;专栏链接&#xff1a;力扣刷题日记 &#x1f4e3;欢迎各位大佬&#x1f44d;点赞&#x1f525;关注&#x1f693;收藏&#xff0c;&#x1f349;留言 文章目录 牛客热题&#xff1a;二叉树与双向链表题目链接方法一…

【LInux】<基础IO> 文件操作 | 文件描述符 | 重定向

&#x1f466;个人主页&#xff1a;Weraphael ✍&#x1f3fb;作者简介&#xff1a;目前正在学习c和算法 ✈️专栏&#xff1a;Linux &#x1f40b; 希望大家多多支持&#xff0c;咱一起进步&#xff01;&#x1f601; 如果文章有啥瑕疵&#xff0c;希望大佬指点一二 如果文章对…

【easyX】动手轻松掌握easyX 1

01 简单绘图 在这个程序中&#xff0c;我们先初始化绘图窗口。其次&#xff0c;简单绘制两条线。 #include <graphics.h>//绘图库头文件 #include <stdio.h> int main() {initgraph(640, 480);//初始化640✖480绘图屏幕line(200, 240, 440, 240);//画线(200,240)…

NAT技术总结与双向NAT配置案例

NAT的转换方式&#xff1a; 1.静态转换&#xff1a;固定的一对一IP地址映射。 interface GigabitEthernet0/0/1 ip address 122.1.2.24 nat static global 122.1.2.1 inside 192.168.1.1 #在路由器出接口 公网地址 私网地址。 2.动态转换&#xff1a;Basic NAT nat address-gr…

centos7下使用docker安装fastdfs服务

先查看容器是否已经存在 docker ps -a 删除掉之前的tracker及storage服务 docker rm tracker docker rm storage 1、没有镜像先下载镜像 docker pull morunchang/fastdfs 2、运行服务 a、不指定物理服务器路径 docker run -d --name tracker --nethost morunchang/fastdfs sh…

【Linux】系统登录,调用shell,shell配置文件,shell命令,特殊符号,shell快捷键,Linux运行级别,解决无限登录问题,修改提示符

目录 Linux系统的登录方式 以及 调用shell Linux shell 以及 shell配置文件 shell 命令 shell 特殊符号 shell 快捷键 Linux操作系统运行级别 单用户模式下解决无限登录问题 centos7修改命令行提示符 PS1 补充、centos7没有滚动条 Linux系统的登录方式 以及 调用shell…

AWS简介

AWS AWS&#xff0c;全称为Amazon Web Services&#xff0c;是亚马逊公司旗下的云计算服务平台&#xff0c;自2006年起向全球用户提供广泛而深入的云计算服务。AWS是全球最全面、应用最广泛的云平台之一&#xff0c;它从全球的数据中心提供超过200项功能齐全的服务&#xff0c…

每周一算法:恰好经过K条边的最短路

题目描述 牛站 给定一张由 M M M 条边构成的无向图&#xff0c;点的编号为 1 ∼ 1000 1\sim 1000 1∼1000 之间的整数。 求从起点 S S S 到终点 E E E 恰好经过 K K K 条边&#xff08;可以重复经过&#xff09;的最短路。 注意: 数据保证一定有解。 输入格式 第 1 …

维护表空间中的数据文件

目录 向表空间中添加数据文件 从表空间中删除数据文件 删除users表空间中的users02.dbf数据文件 对数据文件的自动扩展设置 Oracle从入门到总裁:​​​​​​https://blog.csdn.net/weixin_67859959/article/details/135209645 维护表空间中的数据文件主要包括向表空间中添…

C#【进阶】委托和事件

委托和事件 文章目录 1、委托1、委托概念2、基本语法3、定义自定义委托4、使用自定义委托5、委托变量可以存储多个函数6、系统定义好的委托思考 怪物死亡数据更新 2、事件1、事件概念2、事件的使用3、为什么有事件思考 热水器 3、匿名函数1、匿名函数概念2、基本语法3、使用4、…

电工能混到这份上

最近看到某电工师傅发了一篇帖子&#xff0c;大致内容是他在处理一个简单故障的时候居然花了很长的时间。我们一起来看看他遇到的是什么故障吧! plc 控制的一台设备&#xff0c;行走部分靠 2 个脚踏开关控制&#xff08;内部开关量控制方向&#xff0c;电位器控制速度&#xff…

jspXMl标记语言基础

1.打开命令框进入数据库 打开eclipse创建需要连接的项目 粘贴驱动程序 查看驱动器 使用sql的包 int代表个 conlm代表列名 <%page import"java.sql.ResultSet"%> <%page import"java.sql.Statement"%> <%page import"java.sql.Connect…

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

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

阿里云 服务之前设置的密钥登陆,关闭了密码登录,现在打开密码登录

通过网页远程链接 切换用户 sudo -i 输入vim /etc/ssh/sshd_config 进入配置文件 找到 将这一项设置为yes 重启系统 systemctl restart sshd.service