Unity中C#和Java的相互调用实例代码
程序员文章站
2023-12-19 20:34:10
1、通过c#调用java的方法:
在c#中添加调用的一些代码,利用unity提供的一些接口实现调用java!
private const string java...
1、通过c#调用java的方法:
在c#中添加调用的一些代码,利用unity提供的一些接口实现调用java!
private const string java_class_name = "com.unity3d.player.unityplayer"; private void calljavafunc(string javafuncname, params object[] args) { try { //获取到androidjavaclass,至于这里为什么调用这个类,我也不是很清楚 using (androidjavaclass jc = new androidjavaclass(java_class_name)) { //获取到activity using (androidjavaobject jo = jc.getstatic<androidjavaobject>("currentactivity")) { //调用java方法 jo.call(javafuncname, args); } } } catch (system.exception ex) { debug.log("callsdk error:" + ex.message); } } //c#里就可以通过这个方法调用java里的方法了 public void test1() { int num = 1; calljavafunc("javafuncname", num); }
在java中主要是添加被调用的方法,方法名就是上边的字符串参数(javafuncname),参数需要一一对应!
public class mainactivity extends unityplayeractivity { public void javafuncname(final int num) { log.i("c#调用了javafuncname,参数num:",string.valueof(num)); } }
我是使用eclipse创建的android工程,java中的activity需要继承unityplayeractivity,继承这个activity需要在你的android中填 加classes.jar包,这个包在:
你unity的安 装路径\editor\data\playbackengines\androidplayer\variations\mono\release \ c lasses下,
这样就可以调用java的方法了!
2、通过java调用c#的方法:
在java中添加调用的一些代码,java调用c#主要是通过unity封装的classes.jar包里面的unitysendmessage方
法传递 参数实现,因为该方法只能将一个参数传递给c#的方法,所以传递多个参数的时候可以使用json。
//调用 public void test2() { jsonobject pms=new jsonobject(); try { //参数只能参一个,所以包装成json对象 pms.putopt("funcname","test2"); pms.putopt("num",1); } catch (jsonexception e) { e.printstacktrace(); } //利用unity提供的发送消息接口给unity传递参数, //gameobject是unity中物体的名称, //csharpfunc是c#中方法的名称, //需要将带有csharpfunc这个方法的c#脚本挂在gameobject这个物体上 unityplayer.unitysendmessage("gameobject","csharpfunc",pms.tostring()); }
在c#中 添加被调用的方法,如果传递过来的是多个参数,需要将参数一一解析出来使用 。
//被调用 public void csharpfunc(string data) { jsondata json = jsonmapper.toobject(data); string num = (string)json["num"]; string name = (string)json["funcname"]; debug.log(string.format("被java方法调用了,java方法名字是:{0},参数是{1}",name,num)); }