Unity调用Android
-
打开Unity,在Project中创建文件,Assects→Plugins→Android→src,创建好以后在里面添加java类
package com.unity3d.BabelRunning; import android.app.Activity; import android.content.Context; import android.os.Bundle; import android.util.Log; import java.lang.String; import com.unity3d.player.UnityPlayer; import com.unity3d.player.UnityPlayerActivity; public class BabelRunningActivity extends UnityPlayerActivity { @Override protected void onCreate(Bundle bdl) { super.onCreate(bdl); Log.d("UnityInterface", "=========> BabelRunningActivity start!!!!!!!\n"); } public void callByObject() { } static public boolean isUnlocked() { return true; } static public void FeeExit(Context paramContext) { } }
这里面也可以加其他的类,不是一定要加从UnityPlayerActivity派生的类,你也可以看看Unity自带的UnityPlayerActivity,打开Finder→应用程序→Unity→点击Unity图标,鼠标右键选择“显示包内容”→Contents→PlaybackEngines→AndroidPlayer→bin→classes.jar,jar文件要用java反编译工具打开。
-
把创建好的类打包成jar,首先用eclipse编译,会在bin→classes→com→unity3d→BabelRunning文件夹里面生成BabelRunningActivity.class文件,再用eclipse导出BabelRunningActivity.jar,把导出的jar用java反编译软件(JD_GUI)打开。如果看到了 com.unity3d.BabelRunning 这本包, 这个包的名字一定要跟 java文件中的“ package com.unity3d.BabelRunning;”一样,如果不一样,可以调整class文件的目录,再打jar包,直到一样为止。
-
把生成的jar放在Assets→Plugins→Android→libs下面。
-
编写C#文件,在Android目录下面创建CmBillingResult.cs
using UnityEngine; using System.Collections; using System; using System.Collections.Generic; public class CmBillingResult : MonoBehaviour { private int waitTime = 10; private AndroidJavaClass klass = null; // Use this for initialization void Start () { klass = new AndroidJavaClass("com.unity3d.BabelRunning.BabelRunningActivity"); // 通过对象调用 AndroidJavaObject jo = klass.GetStatic<AndroidJavaObject>("currentActivity"); jo.Call("callByObject"); // 通过类调用,有返回值 klass.CallStatic<bool>("isUnlocked"); // 通过类调用,当前的activity作为参数 klass.CallStatic("FeeExit", curActivity); } }
-
创建好以后加到Main Camera对象上面。
klass.CallStatic("方法名", "参数");第一个参数为方法名称,第二个参数才是真正的参数。
-
AndroidManifest里面的入口改成com.unity3d.BabelRunning.BabelRunningActivity
Android调用Unity
Android调用Unity比较简单。
UnityPlayer.UnitySendMessage("Main Camera", "方法名称", "参数1", "参数2"...);第一个参数,为当前对象,第二个参数为当前对象上面脚本的方法名称,后面的才是真的参数。