Unity与安卓交互

前提条件:Android Studio 3.1.2 、Unity2017 1.1f3、JDK、SDK已经安装好。

1、找到Unity的classes.jar包,目录是放在

C:\Program Files (x86)\Unity\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Classes

上面的目录是我的,如果是你的Unity目录可能不同,你可以先找到Unity运行程序,右击 打开文件所在位置,然后后面的路径都一样了。如果不是Unity2017的话,可以直接在Data下搜classes.jar,百分百找到!

2、在Android Studio新建一个工程,工程里面会有一个默认的app项目,我们不使用它,因为我们只是要一个android 库文件,所以我们可以去新建一个android library,操作步骤:File->New Module->Android Library 然后默认点就OK。

3、将那个classes.jar copy到libs里面,这个libs是在Project面板才有的,copy后要选中classes.jar,然后右击,选中Add as Library,弹出一个窗口,里面一定要选中是你的那个module.

4、由于我们新建的module是没有Activity的,即转回到Android面板 选中我们的module,在java->第一个包下没有任何的文件,选中第一个包右击,新建New->Activity->Empty Activity。

然后找到同项目下的manifests文件,里面需要在<application></application>中间,加入以下代码,注意:android:name=".MainActivity" 是我建立的Activty名字,这里必须设置成你自己建立的Activity名字,注意这个名字前面要加个' . '    (这一步千万别搞错了,不然一切都是浮云)


   <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

5、写我们的Acitivity代码

package com.example.bmobpay;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

import com.unity3d.player.UnityPlayer;
import com.unity3d.player.UnityPlayerActivity;

public class MainActivity extends UnityPlayerActivity {


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

    }
    //unity调用的android方法
    public int test1(int a,int b)
    {
        int c=a+b;
        //android调用unity的方法,第一个参数是方法所在的物体名字,第二个参数是方法名,第三个是方法参数
	  	UnityPlayer.UnitySendMessage("Main Camera", "Test2", c+"");
	  	return c;
    }

}

注意:onCreate中的内容一定要保持和我的一样,不然会出错,而且必须继承自UnityPlayerActivity 

6、回到Project面板,选中我们的module,然后点击菜单上的Build->Make Module ‘你的module名字’,等待build,成功后会在 你的module文件下的build->outputs->aar->找到一个叫 Xxxx.aar的文件,这个文件里面就有我们需要放入unity的东西。首先,我们需要去到这个文件所在的目录,然后解压它,会发现有很多东西出现,我们只需要拿classes.jar,AndroidMainfest.xml,res这3个,copy到我们unity里,Unity要准备一个Plugins/Android文件夹,就是新建一个Plugins,在Plugins里面再新建一个叫Android的文件夹,把这3个copy到这个Android文件夹中,(然后新建一个libs文件夹,将classes.jar放入libs中) 括号中的这一步是确保保持和我的一样不出错,你也可以不做这一步操作。

7、在Unity中,我们在Main Camera挂一个C#脚本,内容如下:(一定要在Main Camera挂!!这一步与上面的有关)

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class UnityAndroidCommunity : MonoBehaviour {

    public Text text;
	void Start () {

        AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
        AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
        int res= jo.Call<int>("test1", 56, 90);
        text.text += "unity自己弄的:"+res.ToString();

    }
	
	void Update () {
		
	}
    public void Test2(string str)//方法名一定要写Test2,因为与上面的有关,我们是需要在Android那边调用到这个方法的,要用到这个方法名。
    {
        text.text = str+"android调用过来的...";        
    }
}

text是一个文本ui

jc和jo的获取方法都是固定的,先获取到jc,再从jc获取到jo,currentActivity就是当前活动的Activity

8、在Unity中 打开File->Build Settings->选中Android ->Switch Platform.然后点击Player Settings

将AndroidMainfest.xml中的PackageName的内容复制到安卓配置下的Package Name中,PC配置下的Bundle Identifier的内容也要与这个PackageName保持一致,然后再确保你的安卓配置下的Minimum API Level 保持和你的AndroidMainfest.xml中的Minimum一样。(这一步超级重要!!其实都很重要= .=,出错的话,要仔细再看一下前面的步骤!),然后还要将当前场景放入Scenes In Build里面。也就是点一下Add Open Scenes,然后就可以build了,祝你成功!

9、build出的apk 最好在真机运行,如果出现安装成功,但是却没法打开,或者连apk程序都不在手机上这种情况,那么就是你的android studio那边出现了一些错误,重新检查一下 是不是有哪些步骤没完成,或者出现了报红,一定要排查干净再build module! 若unity报错的话,可以看看SDK是不是一样,因为android studio自身也有自带的SDK的,一定要是一样的。检查一下unity的SDK和android 的SDK 路径是否一样。如果还有问题,百度吧。。基本也就这样了,这TM搞了我2天!!2天!!


转自

https://blog.csdn.net/qq_39574690/article/details/80928640



猜你喜欢

转载自blog.csdn.net/qq_35647121/article/details/81026271