unity3d调用jar类中的方法和属性

这里用的unity3d的版本是5.3.2

在eclipse里新建一个java工程,并导出成jar。


package com.innyo.androidplugin;

public class apTest {

	public apTest(String inString) {
		tryProp = "propties is ok.<" + inString + ">";
	}

	public String tryProp = "public propties is return.";

	public static String tryStaticProp = "static propties is return.";

	public String TryPublic() {
		return "public method run ok.";
	}

	public String TryPublic(String inString) {
		return "public method with prop run ok.<" + inString + ">";
	}

	public static String TryStaticPublic() {
		return "static public method run ok.";
	}

	public static String TryStaticPublic(String inString) {
		return "static public method whith prop run ok.<" + inString + ">";
	}
}

导出为jar




新建unity3d工程,导入jar文件。


新建一个场景,把内容输出到text上显示,

using UnityEngine;
using System.Collections;
using System;
using UnityEngine.UI;

public class TryPlugin : MonoBehaviour
{

	public Text t;

	public void ToTry ()
	{
		try {
			t.text = "start android plugins";

			t.text = t.text + "\r\n";
			AndroidJavaClass jc = new AndroidJavaClass ("com.innyo.androidplugin.apTest");
			t.text = t.text + "AndroidJavaClass jc:" + jc.ToString ();

			t.text = t.text + "\r\n";
			t.text = t.text + "tryProp:" + jc.Get<string> ("tryProp");

			t.text = t.text + "\r\n";
			t.text = t.text + "tryStaticProp:" + jc.GetStatic<string> ("tryStaticProp");

			t.text = t.text + "\r\n";
			t.text = t.text + "TryPublic:" + jc.Call<string> ("TryPublic");

			t.text = t.text + "\r\n";
			t.text = t.text + "TryPublic:" + jc.Call<string> ("TryPublic", "unity3d input");

			t.text = t.text + "\r\n";
			t.text = t.text + "TryStaticPublic:" + jc.CallStatic<string> ("TryStaticPublic");

			t.text = t.text + "\r\n";
			t.text = t.text + "TryStaticPublic:" + jc.CallStatic<string> ("TryStaticPublic", "unity3d input");

			t.text = t.text + "\r\n";
			t.text = t.text + "----------------------------------------";

			t.text = t.text + "\r\n";
			AndroidJavaObject jo = new AndroidJavaObject("com.innyo.androidplugin.apTest","unity3d jo build");
			t.text = t.text + "AndroidJavaObject jo:" + jo.ToString ();

			t.text = t.text + "\r\n";
			t.text = t.text + "tryProp:" + jo.Get<string> ("tryProp");

			t.text = t.text + "\r\n";
			t.text = t.text + "tryStaticProp:" + jo.GetStatic<string> ("tryStaticProp");

			t.text = t.text + "\r\n";
			t.text = t.text + "TryPublic:" + jo.Call<string> ("TryPublic");

			t.text = t.text + "\r\n";
			t.text = t.text + "TryPublic:" + jo.Call<string> ("TryPublic", "unity3d input");

			t.text = t.text + "\r\n";
			t.text = t.text + "TryStaticPublic:" + jo.CallStatic<string> ("TryStaticPublic");

			t.text = t.text + "\r\n";
			t.text = t.text + "TryStaticPublic:" + jo.CallStatic<string> ("TryStaticPublic", "unity3d input");

		} catch (Exception ex) {
			t.text = t.text + "\r\n";
			t.text = t.text + ex.Message;
		}
	}
}

编译成安卓,然后运行,点击按钮,可以看到以下结果



AndroidJavaClass只能调用静态方法,获取静态属性

AndroidJavaObject能调用公开方法和公开属性

另外,jar文件,不一定非要放在plugins/android目录下。

例子代码:http://download.csdn.net/detail/wuyt2008/9444745


=====================================


如果是调用jar类中的枚举,而且枚举必须不是类下面的,方法如下

java

package com.innyo.androidplugin;

public enum TryEnum {
	red,green,yellow,blcak

}


unity3d

AndroidJavaObject redValue = 
	new AndroidJavaClass("com.innyo.androidplugin.TryEnum").GetStatic<AndroidJavaObject>("red");



如果是调用jar类中的接口,实在是不会在java中写事件接口,只好拿别人的用。

unity3d

public class DateCallback : AndroidJavaProxy
{
	public DateCallback ()
		: base ("com.amap.api.location.AMapLocationListener")
	{
	}

	void onLocationChanged (AndroidJavaObject amapLocation)
	{
		
	}
}

等效于java中写

public class Hight_Accuracy_Activity implements AMapLocationListener {

	@Override
	public void onLocationChanged(AMapLocation loc) {

	}
}



  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值