Unity3d调用android中的方法

之前看了http://www.xuanyusong.com/archives/667网站的方法,讲的是eclipse。感觉有点小麻烦,而且是基于eclipse,再者我感觉作者是应该是做unity3d的,所以说的有点麻烦。
其实调用android的方法很简单。

首先在unity3d的脚本文件(c#)中调用android中的方法主要代码如下:

//获取android中com.unity3d.player.UnityPlayer,这个类在unity3d导出工程的unity-class.jar中
AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
//获取当前正在运行的activity
            AndroidJavaObject jo = jc.GetStatic("currentActivity");
//调用activity中的方法
jo.Call("StartActivity1", "第二个Activit");

知道了,这个就好说了。

  1. 建立一个unity3d项目,随便给个对象创建个脚本文件。
    我在这创建了Terrain,然后创建了个cube,然后创建了TestAndroid脚本,添加到了cube上。如下图:

    Unity3d调用android中的方法_第1张图片

脚本内容如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class TestAndroid : MonoBehaviour {

    // Update is called once per frame
    void Update()
    {
        Debug.Log("Update**************************************");
        //当用户按下手机的返回键或home键退出游戏
        if (Input.GetKeyDown(KeyCode.Escape) || Input.GetKeyDown(KeyCode.Home))
        {
            Application.Quit();
        }
    }

    void OnGUI()
    {
        if (GUILayout.Button("OPEN Activity01", GUILayout.Height(100)))
        {
            Debug.Log("Button*******************");
            //注释1
            AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
            AndroidJavaObject jo = jc.GetStatic("currentActivity");
            jo.Call("StartActivity0", "第一个Activity");
        }
        if (GUILayout.Button("OPEN Activity02", GUILayout.Height(100)))
        {
            Debug.Log("Button2");
            AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
            AndroidJavaObject jo = jc.GetStatic("currentActivity");
            jo.Call("StartActivity1", "第二个Activit");
        }
    }

}

2.导出Android工程:
Unity3d调用android中的方法_第2张图片

剩下就开始android端的处理

  • 把导出的代码,作为module导入到android studio中。
    导入后类似下图:
    Unity3d调用android中的方法_第3张图片

    我这个工程中有好几个module,control是unity3d导出的,其他的不用管。

  • 然后修改android中主activity,代码如下:

public class UnityPlayerActivity extends Activity
{
    protected UnityPlayer mUnityPlayer; // don't change the name of this variable; referenced from native code
    FrameLayout layout;
    // Setup activity layout
    @Override protected void onCreate (Bundle savedInstanceState)
    {
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        super.onCreate(savedInstanceState);

        getWindow().setFormat(PixelFormat.RGBX_8888); // <--- This makes xperia play happy

        setContentView(R.layout.main);
        mUnityPlayer = new UnityPlayer(this);
        layout = (FrameLayout) findViewById(R.id.container);
        layout.addView(mUnityPlayer);
        mUnityPlayer.requestFocus();
    }

    public void StartActivity0(String name)
    {
        Intent intent = new Intent(this,TestActivity0.class);
        intent.putExtra("name", name);
        this.startActivity(intent);
    }

    public void StartActivity1(String name)
    {
        Intent intent = new Intent(this,TestActivity1.class);
        intent.putExtra("name", name);
        this.startActivity(intent);
    }

其中StartActivity0和StartActivity1可以让unity3d中的脚本,调用如下代码,最终就会调用到android中的代码了。

 AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
            AndroidJavaObject jo = jc.GetStatic("currentActivity");
            jo.Call("StartActivity0", "第一个Activity");
  AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
            AndroidJavaObject jo = jc.GetStatic("currentActivity");
            jo.Call("StartActivity1", "第二个Activit");

你可能感兴趣的:(unity3d)