51Testing软件测试论坛
标题:
Android java代码 和 Unity3d之间的通讯
[打印本页]
作者:
司格特
时间:
2018-6-21 16:16
标题:
Android java代码 和 Unity3d之间的通讯
简介
Unity3D作为一款操作简单、特效华丽、上手容易的游戏开发引擎,已经被越来越多的用在了移动开发
的各个方面。当然在大部分工程中,Unity3d可能只作为其中的一个模块,那么就涉及到了原生开发和U
nity3d开发之间的通讯问题。本文以Android开发为例,介绍两者间的交互。
正题
通讯的实现有两种方式:1、以Unity3D工程为主,Android只做少量开发,此种情况下将Android代码打
包导入Unity3D中;2、以Android工程为主,Unity3D只做为其中的一个模块,此种情况下将Unity3D工程
导入Android中。第一种情况比较简单,我们不做介绍,我们来看第二种情况(其实包含了第一种情况用
到的知识)。
1、Unity3D脚本调用Android中的方法
首先,我们要知道,Unity3D的脚本用的C#语言和Android用的Java语言之间的调用是使用的类似于Jni
的Native方式。我们来看一下Unity3D的脚本中应该怎么写:
public void Onclick() {
AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
jo.Call("showToast", "成功调用android方法");
}
很重要:不要去改"com.unity3d.player.UnityPlayer"和"currentActivity",这俩就是必须得这么写。
下边这个Call方法才是真正的去调用Android原生中的方法,showToast是方法名,后边那个字符串是参
数。以下是写在UnityPlayerActivity中的方法(后边解释为什么写在这个里边):
public void showToast(String message){
Toast.makeText(this, message, Toast.LENGTH_SHORT).show();;
}
非常简单的一句Toast输出,输出的信息就是:"成功调用android方法"。
以下是调用Java中不同类别方法的C#代码:
//无参数方法, 比如Activity的finish()方法
jo.Call(string methodName);
//带参数方法,args为参数列表
jo.Call(string methodName, params Object[] args);
//调用Android中静态方法要用以下方法
jo.CallStatic(string methodName);
jo.CallStatic(string methodName, params Object[] args);
2、Android原生代码调用Unity3D脚本中的方法
这个就比较简单了,只有一个特定的方法来实现调用。在你导出的工程中,使用以下代码来进行调用:
UnityPlayer.UnitySendMessage(String gameObjectName, String methodName, String arg);
第一个参数:你需要调用的脚本所绑定的Unity3D对象名
第二个参数:你要调用的方法名
第三个参数:此方法所需要的参数
(注意:你要掉用的脚本必须要绑定在Unity的对象上)
3、其他
以上的这些方法其实是关于C#和Java之间调用的知识,而我们之所以能这样用是因为Unity3d默认提
供了两者互相调用的官方插件。如果你觉得以上的调用方法是无法满足你的项目需求,而自己水平还不
错的话,Unity3d也支持用户自己写插件实现Android和Unity3d的调用。
自定义Android插件详见:[Unity3d之Building Plugins for Android](
https://docs.unity3d.com/Man
欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/)
Powered by Discuz! X3.2