欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Unity与Android Studio交互

程序员文章站 2022-05-29 21:37:53
...

Unity与Android Studio交互

工作过程中接触了很多新的知识,但一直没想起来记录下来,导致有很多都记不清楚,于是决定开始将知识进行汇总以备后续的学习或使用。因为是初次使用,所以可能有很多错误的地方,希望大家及时回复我以进行改正,谢谢。

方法引自: https://blog.csdn.net/g777520/article/details/53331797与https://blog.csdn.net/qq_15020543/article/details/80516066

前提

在工作过程中需要与Android端进行配合使用,但是在网上找到的交互方式大多是生成jar或是arr包。我试了很多种方法总是出错,最后尝试了直接用Unity导出,这次终于成功了。
下面是我的具体操作

一、创建一个Unity工程

我使用的是Unity 7.1.2,算是比较新的版本了,现在创建一个Text以及两个Button,分别命名为 Button01,Button02,令外加一个Cube,将Canvas设置成Screen Space-Camera
Unity与Android Studio交互
C#:挂在MainCamera上的脚本Test

using UnityEngine;
using UnityEngine.UI;
public class Test : MonoBehaviour {
    //定义一个int 变量用来接收java传过来的参数
    int index = 0;
    string angle;
    public Text mtext;
    //一个旋转物体
    public GameObject cube;
    public void OnClick1()
    {
        AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
        AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
        /* jo.call | java对象的函数名字
         *   <>    | 函数返回值类型
         *  ("")   | 调用的方法名    */
        index = jo.Call<int>("makePauseUnity");
        angle = jo.Call<string>("makeRotateUnity");
        mtext.text = index.ToString();
        RotateCube(angle);
    }
    public void OnClick2()
    {
        print("OnClick1被执行到了");
        /* com.android.unityToandroid : Android工程定义的包名
         * UnityPlayerActivity :java方法所在的类名 */
        AndroidJavaClass jc = new AndroidJavaClass("com.android.unityToandroid.UnityPlayerActivity");
        //m_instance : UnityPlayerActivity类中自己声明 
        AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("m_instance");
        //ShowMessage : java对应的方法 
        //Unity : 向这的代码传一个参数
        jo.Call("ShowMessage", "Unity");
    }
    public void RotateCube(string angle)
    {
        cube.transform.Rotate(Vector3.up, float.Parse(angle));
    }
}

二、打包Android工程

1、File->Build Setting后弹出
Unity与Android Studio交互
1)选择android平台
2)点击player settings
3)更改包名(★很重要)
4)将Build System改为Gradle
5) 勾选Export Project(如果不勾,导出为apk)
6) Export
导出一个文件夹

Unity与Android Studio交互

可能会出现错误:release builds have to be signed when using Gradle,这是因为没有签名,接下来开始签名设置
2、Gradle签名
1)关闭other settings,打开publishing settings,点击Browse Keystore ,新建文件夹保存Key,点击确定
2)点击Unsigned(debug)之后会有一个下拉列表选择Create a new Key。并弹出一个二级弹框设置。

Unity与Android Studio交互

Alias:设置key的名称
Validity:有效期
3)点击CreatKey后,在Alias选择刚刚创建的Key的名字.输入Key的密码。Ctrl+s保存,之后点击Build。

3、Android Studio
导入Android Studio,如下图
Unity与Android Studio交互

打开UnityPlayerActivity,在此界面进行编译

Unity与Android Studio交互

代码:

package com.andrtoid.unityToandroid;

import com.unity3d.player.*;
public class UnityPlayerActivity extends Activity
{
    protected UnityPlayer mUnityPlayer;referenced from native code
    private int index;
    private String string;
    public static UnityPlayerActivity m_instance=null;
    // 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
        mUnityPlayer = new UnityPlayer(this);
        setContentView(mUnityPlayer);
        mUnityPlayer.requestFocus();

        m_instance=this;
    }

    //Unity调用的ShowMessage方法并传递参数 str
    public void ShowMessage(final String str){
        Log.i("调用信息", "我被onclik2调用了");
        runOnUiThread(new Runnable() {

            @Override
            public void run() {
                Show(str);
            }
        });
    }

    public void Show(String str){
        Toast.makeText(this, str+"成功调用了android中的函数", Toast.LENGTH_LONG).show();
    }
    
    //Unity调用的makePauseUnity方法并返回index
    public int makePauseUnity(){
        Log.i("调用信息","我被onclick1调用了");
        index++;
        return index;
    }
    //这是我模仿上式写的,不一定完全正确
     public String makeRotateUnity(){
        Log.i("调用信息","我被onclick1调用了");
        string="80";
        return string;
    }
}

编译结束,下面显示结果
Unity与Android Studio交互

Unity与Android Studio交互

Unity与Android Studio交互

相关标签: unity