好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

Unity中C#和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));

   }

原文链接:http://blog.csdn.net/qq_33461689/article/details/79209953

dy("nrwz");

查看更多关于Unity中C#和Java的相互调用实例代码的详细内容...

  阅读:44次