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

Unity3d和Android之间互相调用

摘抄博客 Unity3d Android SDK接入解析(一)Unity3d 与 Android之间的互相调用,一共四章,一定要看完

No1:

总体来说Unity3d与Android之间的互相调用,是通过Unity3d提供的classes.jar来实现的

No2:

常见的方法就是

1)在Android层定义好接口

2)在Unity中通过反射调用(反射大法好啊,真是好)

No3:

UnityPlayer是FrameLayout的一个子类,而currentActivity则是UnityPlayer类中的静态对象。

No3:

我们一般建立了一个新的MyActivity继承UnityPlayerActivity,并在AndroidManifest中把MyActivity设置为启动的Activity,然后使用currentActivity这个jo来调用方法。

No4:

新版Unity生成的unity-class.jar中类的继承关系变简单了:UnityPlayerActivity->Activity,之前的UnityPlayerNativeActivity被废弃了

No5:

UnityPlayerActivity中

mUnityPlayer = new UnityPlayer(this);

把上下文传进去

在UnityPlayer中

 public UnityPlayer(Context var1) {
        super(var1);
        if (var1 instanceof Activity) {
            currentActivity = (Activity)var1;
        }

把上下文传给currentActivity,所以currentActivity就是当前的上下文

No6:

Android SDK的接入一般分为两种

1)一种是把Unity的工程导出google project的形式进行接入 
2)另一种是通过把Android的工程做成Plugins的形式进行接入

对比

No7:

只有当需要在Activity的生命周期中执行一些操作时,我们才需要一个中间Activity去完成这些与生命周期相关的操作,而其他情况下,一个Class足以

No8:

Unity调用Android方法默认不是在UI主线程上执行的,所以如果你想要对UI界面进行操作,那就要使用runOnUiThread才行。

No9:

每个渠道SDK有两个class,一个管理账号信息,一个管理支付信息,账号与支付分离

No10:

调用上,C#初始化“包名+类名”的AndroidJavaClass对象,使用这个对象来调用对应功能

No11:

Activity生命周期的处理:(C#处理的方式)

android代码

public void lifeCycle(int status) {
    if (getActivity() == null) {
        DybGSdkUtil.E("还未Init初始化,不执行生命周期操作 ");
        return;
    }

    switch (status) {
    case DybGSdkConstants.onStart:
        break;
    case DybGSdkConstants.onResume:
        BuoyOpenSDK.getIntance().showSmallWindow(getActivity());
        break;
    case DybGSdkConstants.onPause:          
        BuoyOpenSDK.getIntance().hideSmallWindow(getActivity());
        BuoyOpenSDK.getIntance().hideBigWindow(getActivity());
        break;
    case DybGSdkConstants.onStop:
        break;
    case DybGSdkConstants.onDestroy:
        OpenHwID.releaseResouce();
        BuoyOpenSDK.getIntance().destroy(getActivity());
        break;
    default:
        break;
    }
}

C#调用

void OnApplicationPause(bool isPause)
        {
            if (isPause) {
                string json = "{'status':'3'}";
                ajc_SDKCall.CallStatic("uaLifeCycle",json);
            }
        }

    void OnApplicationFocus(bool isFocus)
    {
        if (isFocus)
        {
            if (ajc_SDKCall != null){
                string json = "{'status':'1'}";
                ajc_SDKCall.CallStatic("uaLifeCycle",json);
                json = "{'status':'2'}";
                ajc_SDKCall.CallStatic("uaLifeCycle",json);
            }
        }
    }

    void OnApplicationQuit()
    {
        string json = "{'status':'5'}";
        ajc_SDKCall.CallStatic("uaLifeCycle",json);
    }
// Android Activity生命周期
public static final int onStart = 1;
public static final int onResume = 2;
public static final int onPause = 3;
public static final int onStop = 4;
public static final int onDestroy = 5;
public static final int onRestart = 6;

No12:

如果想从android层传数据到unity层,使用UnityPlayer.UnitySendMessage(OBJNAME, "andToU3dCallback", "exit");方法

切记:这个API需要大写S开头的Send才能调出来,小写s开头的send调不出来,坑爹啊

欢迎关注我的微信公众号:安卓圈

转载于:https://www.cnblogs.com/anni-qianqian/p/8794869.html

相关文章:

  • 初涉三分法
  • 关于inodes占用100%解决方法
  • 电商系统处理
  • 20154307《网络对抗》Exp4 恶意代码分析
  • Mac下Nginx访问目录,出现403 Forbidden
  • mac 安装 tomcat 配置
  • 聚类算法
  • 20165215 结对编程——四则运算第一周
  • E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系。...
  • 01 JS基础
  • geth常用指令
  • 信号是如何在光纤中传播的?
  • 解析Json字符串的三种方法
  • Python_字符串处理方法
  • SqlSugar解决SQLite访问的问题:Unable to load DLL 'SQLite.Interop.dll'
  • 【译】理解JavaScript:new 关键字
  • 【跃迁之路】【444天】程序员高效学习方法论探索系列(实验阶段201-2018.04.25)...
  • 77. Combinations
  • android 一些 utils
  • AzureCon上微软宣布了哪些容器相关的重磅消息
  • CSS实用技巧干货
  • ECS应用管理最佳实践
  • EventListener原理
  • GraphQL学习过程应该是这样的
  • Java到底能干嘛?
  • Java知识点总结(JavaIO-打印流)
  • LeetCode刷题——29. Divide Two Integers(Part 1靠自己)
  • MySQL的数据类型
  • Node + FFmpeg 实现Canvas动画导出视频
  • OSS Web直传 (文件图片)
  • PaddlePaddle-GitHub的正确打开姿势
  • SAP云平台运行环境Cloud Foundry和Neo的区别
  • TypeScript迭代器
  • 前端面试之闭包
  • 通过几道题目学习二叉搜索树
  • - 语言经验 - 《c++的高性能内存管理库tcmalloc和jemalloc》
  • 交换综合实验一
  • 微龛半导体获数千万Pre-A轮融资,投资方为国中创投 ...
  • ​html.parser --- 简单的 HTML 和 XHTML 解析器​
  • #[Composer学习笔记]Part1:安装composer并通过composer创建一个项目
  • #include
  • (04)Hive的相关概念——order by 、sort by、distribute by 、cluster by
  • (16)UiBot:智能化软件机器人(以头歌抓取课程数据为例)
  • (3)llvm ir转换过程
  • (Redis使用系列) Springboot 使用redis的List数据结构实现简单的排队功能场景 九
  • (二)【Jmeter】专栏实战项目靶场drupal部署
  • (二十五)admin-boot项目之集成消息队列Rabbitmq
  • (附源码)ssm高校志愿者服务系统 毕业设计 011648
  • (教学思路 C#之类三)方法参数类型(ref、out、parmas)
  • (论文阅读23/100)Hierarchical Convolutional Features for Visual Tracking
  • (四)鸿鹄云架构一服务注册中心
  • (一)搭建springboot+vue前后端分离项目--前端vue搭建
  • (转)大道至简,职场上做人做事做管理
  • (转)重识new
  • .form文件_一篇文章学会文件上传