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

福建漳州东山规划建设局网站软文推广营销平台

福建漳州东山规划建设局网站,软文推广营销平台,什么网站做论坛签名,江宁区住房和城乡建设厅网站在unity开发或者sdk开发经常遇到unity与移动端原生层之间进行通信,这里把它们之间通信做一个整理。 关于Unity与iOS之间通信,参考【Unity3d】Unity与iOS之间通信 Unity(c#)调用Android (一)、编写Java代码 实际上,任何已经存在的Java代码…

在unity开发或者sdk开发经常遇到unity与移动端原生层之间进行通信,这里把它们之间通信做一个整理。

关于Unity与iOS之间通信,参考【Unity3d】Unity与iOS之间通信

Unity(c#)调用Android

(一)、编写Java代码

实际上,任何已经存在的Java代码都可以被c#调用,不像iOS中需要事先用extern "C"修饰。

例如,Java中的MyJavaClass内容如下:

package com.devnn.demo;public class MyJavaClass{private static MyJavaClass instance=new MyJavaClass();public static getInstance(){return instance;}public String test(String param){return "This message is from Android!"}
}

getInstancetest是可以被c#调用的。

如果是kotlin写的代码,也是可以被c#调用的,要注意类路径,最好查看字节码或者反编译成Java查看路径。
另外,用了kotlin之后,需要额外添加kotlin运行时库,例如:
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.7.20"

为了方便导出jar或者aar,建议在library工程中编写。

(二)、将Java代码打包成aar或jar,拷贝到unity工程中

将打包好的aar或者jar拷贝到Unity工程的Assets目录或子目录中。

实际上拷贝到unity工程的Assets目录下的任意位置都可以,aar和jar会自动被unity作为lib依赖。(从导出gradle工程后可以看得出来)

(笔者使用的unity版本是2019.4,以前的版本不知道是否可以是任意位置。)

为了方便管理,以上aar/jar一般放在Assets/Plugins/Android中。

(三)、在c#中调用Java代码

c#中提供了两个类可以调用Java代码:

AndroidJavaClass.cs
AndroidJavaObject.cs

它们都在UnityEngine命名空间中。

AndroidJavaClass是继承自AndroidJavaClass

这两个类的区别一般我们用不着,使用其中任意一个都可以。

使用方式很简单,在构造方法中传入Java类的完整路径,然后调用Call方式调用Java实例方法或者CallStatic调用Java的静态方法。方法泛型中写Java返回的类型。

示例代码:

 	//实例化AndroidJavaClass,传入Java类路径AndroidJavaClass jc = new AndroidJavaClass("com.devnn.demo.MyJavaClass");//如果找不到Java类,返回nullif(jc == null) return;          //调用Java类的getInstance方法获取实例AndroidJavaObject jo = jc.CallStatic<AndroidJavaObject>("getInstance");//如果找不到Java方法,返回nullif (jo == null) return;string param = "Hello,Android!";string result = jo.Call<string>("test", param); //调用test方法,返回值是字符串。

Android调用Unity(c#)

Android调用c#比较简单,使用以下方法即可。

   UnityPlayer.UnitySendMessage("MyTestObject", "TestFunc","msg");

需要依赖unity的classes.jar,位置在unity安装目录:AndroidPlayer/Variations/mono/Release/Classes/classes.jar

Unity工程导出Android工程时,默认已经依赖了这个jar,自己新建的Android工程需要导入上述jar包。

这个unity的classes.jar目前不是开源的,反编译看到是混淆后的代码。

UnitySendMessage方法的源码如下:

//com.unity3d.player.UnityPlayer.classpublic static void UnitySendMessage(String var0, String var1, String var2) {if (!n.c()) {g.Log(5, "Native libraries not loaded - dropping message for " + var0 + "." + var1);} else {try {nativeUnitySendMessage(var0, var1, var2.getBytes("UTF-8"));} catch (UnsupportedEncodingException var3) {}}}private static native void nativeUnitySendMessage(String var0, String var1, byte[] var2);

可见,这是通过jni实现的。

第一个参数var0表示unity中物体GameObject的名字,注意不是c#脚本的名称也不是类名。

如下图:
在这里插入图片描述

第二个参数var1表示这个物体挂载的c#脚本中方法的名字。

第三个参数表示var2表示这个方法接收的数据。

例如,以上物体MyTestObject挂载了MyScript.c#脚本(如上图),MyScript.c#中有一个TestFunc方法:

using UnityEngine;public class MyScript : MonoBehaviour
{private void TestFunc(string content){//这里是接收Android调用的实现}  }

那么在Android中调用UnitySendMessage("MyTestObject", "TestFunc", "msg") c#的TestFunc方法就会执行。

如果有多个参数需要发送,推荐使用json格式。

http://www.dinnco.com/news/36322.html

相关文章:

  • 流程网站设计seo优化是什么意思
  • 做设计常用网站有哪些品牌推广渠道有哪些
  • 视频网站外链怎么做市场营销手段有哪四种
  • 南阳响应式网站制作湖南长沙疫情最新消息
  • 门户网站用什么后台系统好合肥做网站的公司有哪些
  • app开发和网站开发一样么深圳seo推广培训
  • 韩雪冬做网站多少钱爱站网官网
  • 营销品牌策划公司seo交流qq群
  • 做网站怎么兼职seo网络营销公司
  • 中机建设一公司网站网站标题算关键词优化吗
  • 青岛专业制作网站的公司吗域名批量注册查询
  • 有没有免费做企业网站的济南seo优化公司助力排名
  • 莆田房产网seo推广教程
  • 网站制作明细清单武汉本地seo
  • 好用的软件下载网站营销软文范例大全300
  • 佛山建网站费用北京搜索引擎优化
  • 北京网站建设 云智互联成品短视频软件大全下载手机版
  • 外贸型网站推广与监测目前最好的营销模式
  • 网站建设公司的出路网站维护费用
  • 用fw做明星的网站深圳网
  • 游戏网站开发具备常见的营销方式有哪些
  • 淘宝网电脑版登录入口官网枫林seo工具
  • react 做网站免费二级域名申请网站
  • 网站会员模板网络营销策划方案怎么做
  • 魔域永恒网页游戏一个网站可以优化多少关键词
  • java 网站开发流程网站建设流程图
  • 广州公司注册地址迁址网上办理seo查询爱站
  • 超市供应商平台百度seo指南
  • 佛山网站建设哪个好点广州网站建设
  • wix英文网站建设长沙关键词排名软件