Unity3d调用android中的方法

来源:互联网 发布:电脑计算器软件下载 编辑:程序博客网 时间:2024/06/05 09:15

之前看了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<AndroidJavaObject>("currentActivity");//调用activity中的方法jo.Call("StartActivity1", "第二个Activit");

知道了,这个就好说了。

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

    这里写图片描述

脚本内容如下:

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<AndroidJavaObject>("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<AndroidJavaObject>("currentActivity");            jo.Call("StartActivity1", "第二个Activit");        }    }}

2.导出Android工程:
这里写图片描述

剩下就开始android端的处理

  • 把导出的代码,作为module导入到android studio中。
    导入后类似下图:
    这里写图片描述

    我这个工程中有好几个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<AndroidJavaObject>("currentActivity");            jo.Call("StartActivity0", "第一个Activity");
  AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");            AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");            jo.Call("StartActivity1", "第二个Activit");
原创粉丝点击