当前位置: 移动技术网 > IT编程>开发语言>c# > Unity中C#和Java的相互调用实例代码

Unity中C#和Java的相互调用实例代码

2019年07月18日  | 移动技术网IT编程  | 我要评论

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));
  }

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网