欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

上一篇:

下一篇: