Unity与安卓交互

一、AndroidStudio

1.打开AndroidStudio后新建一个Empty Acticity项目

android unity 通信 unity与android交互详细_xml

2.点击Next进行下一步

android unity 通信 unity与android交互详细_jar包_02

3.name自己取一个,包名我设置为com.unity3d.player,接入多个sdk容易整合语言我们选择java,Api设置为17,然后点击Finish完成

name: TestDemo

Package name: com.unity3d.player

language: Java

Api: 17

android unity 通信 unity与android交互详细_android_03

4.稍等AS加载一下,我们就可以搭建安卓和Unity通讯了

android unity 通信 unity与android交互详细_jar包_04

5.我们将AS切换到Project视图

android unity 通信 unity与android交互详细_AndroidStudio_05

6.将Unity的jar包放到AS的app-libs文件夹下

jar包的位置:

你的Unity安装位置\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Classes

android unity 通信 unity与android交互详细_android unity 通信_06


AS的app-libs打开快捷方式

android unity 通信 unity与android交互详细_jar包_07


复制粘贴过来就行了

android unity 通信 unity与android交互详细_android_08

7.将jar包添加到Library

(1.)我们右键点击app,然后选择Open Moudle Settings打开模式设置

android unity 通信 unity与android交互详细_AndroidStudio_09


看到classes.jar包被依赖上了

android unity 通信 unity与android交互详细_android_10


(2.)右键libs下的classes,然后选择add As Libratr…

android unity 通信 unity与android交互详细_xml_11


点击Ok!

android unity 通信 unity与android交互详细_xml_12

8.加载完成后就可以修改MainActivity.jar文件

先找到它

android unity 通信 unity与android交互详细_AndroidStudio_13

android unity 通信 unity与android交互详细_android_14


(1.)将MainActivity.jar文件的继承从 AppCompatActivity 改成 UnityPlayerActivity

(2.)删掉文件中灰色的引用:

android unity 通信 unity与android交互详细_AndroidStudio_15


(3.)删掉 setContentView(R.layout.activity_main);

android unity 通信 unity与android交互详细_android unity 通信_16


(4.)打开app文件夹下的build.gradle

android unity 通信 unity与android交互详细_android unity 通信_17


1)、最上方的 apply plugin: ‘com.android.application’ 改为 apply plugin: ‘com.android.library’

2)、注释掉 applicationId “你的包名”

3)、注释掉测试用的 testInstrumentationRunner “android.support.test.runner.AndroidJUnitRunner”

android unity 通信 unity与android交互详细_AndroidStudio_18


注释掉下面的这四项

android unity 通信 unity与android交互详细_jar包_19

9.删掉styles.xml文件

文件位置:app-src-main-res-values-styles.xml

android unity 通信 unity与android交互详细_jar包_20

10.修改activity_main.xml

文件位置:app-src-main-res-layout-activity_main.xml

android unity 通信 unity与android交互详细_jar包_21


1.)如果界面是这个样子的,就点击下面这个Text

android unity 通信 unity与android交互详细_xml_22


2.)删掉红框所选区域

android unity 通信 unity与android交互详细_jar包_23


3.)删掉灰色代码

android unity 通信 unity与android交互详细_AndroidStudio_24

11.修改AndroidManianifest.xml文件

文件位置:app/src/main/AndroidManianifest.xml

android unity 通信 unity与android交互详细_android unity 通信_25


a、将 android:theme="@style/AppTheme"> 改为 android:theme="@android:style/Theme.NoTitleBar">

b、将 <activity android:name=".MainActivity"> 改为 <activity android:name="你的包名.MainActivity">

android unity 通信 unity与android交互详细_AndroidStudio_26

12.我们返回MainActivity.jar文件添加方法,供Unity调用

1.)添加 UnityCallShake 方法,

public void UnityCallShake(String msg){
        Toast.makeText(getApplicationContext(),msg,Toast.LENGTH_LONG).show();
        Vibrator vibrator=(Vibrator)getApplication().getSystemService(Service.VIBRATOR_SERVICE);
        vibrator.vibrate(2000);
   	 }

2.)需要import这几个包

import android.app.Service;
import android.os.Vibrator; import
android.widget.Toast;

点击这个小灯泡

android unity 通信 unity与android交互详细_jar包_27


添加震动权限

android unity 通信 unity与android交互详细_xml_28

13.导出jar包

android unity 通信 unity与android交互详细_xml_29


等待加载完成

android unity 通信 unity与android交互详细_xml_30

14.找到jar包,打开文件位置,解压jar包

jar包位置:app-build-outputs-arr-app-debug.arr

android unity 通信 unity与android交互详细_jar包_31


使用你的压缩软件解压,没有解压选项选择打开方式,如果你的解压软件不支持,那就下载一个别的

android unity 通信 unity与android交互详细_xml_32


解压完成

android unity 通信 unity与android交互详细_xml_33


将文件里的libs、res、AndroidManifest.xml文件 复制到Unity文件夹Assets-Plugins-Android文件夹下。

android unity 通信 unity与android交互详细_android unity 通信_34


删掉libs文件夹的classes.jar包,替换为②解压文件根目录里的classes.jar包。

android unity 通信 unity与android交互详细_xml_35

15.在Unity调用Jar包

using UnityEngine;
 
public class ClickShake : MonoBehaviour {
 
    AndroidJavaObject JavaObject;
 
	void Start () {
        //以下两行是调用AScurrentActivity中方法的默认写法。不需修改。
        AndroidJavaClass androidJavaClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
        JavaObject = androidJavaClass.GetStatic<AndroidJavaObject>("currentActivity");
	}
 
    public void ClickShakeBtn()
    {
        JavaObject.Call("UnityCallShake", "来自Unity的调用");
    }

16.打包

a、包名与AS保持一致

b、Unity最小API与AS保持一致

c、用Internal打包