Unity 与 Android (Android Studio)的交互

Unity 与 Android (Android Studio)的交互

1.大体思路:

在Android Studio 中编译导出Jar库,提供函数供 Unity 调用;安卓端提供三个测试函数:弹出对话框弹出Toast手机振动;Unity端提供界面,添加三个按钮分别调用这三个安卓提供的函数

2.编译环境

Unity 4.3.4 + Android Studio 1.5( buildToolVersion:23.0.2)

3.Android 部分

1)新建工程

新建一个 Android 工程例如叫 JarDemo ,然后依次点击:菜单栏中File -> New -> New Module -> 选择 Android Library -> 库的名称为 android2u3d,然后把layout下的activity_main.xml删掉,目前不需要这个布局文件。同时在MainActivity.java 的 onCreate 函数中将 setContentView(R.layout.activity_main); 删掉。

2)修改配置

Unity4.x安装目录\Editor\Data\PlaybackEngines\androidplayer\bin 下找到classes.jar 文件拷贝到 JarDemo\android2u3d\libs 目录下,然后依次点击菜单栏中File -> Project Structures -> 在左侧栏的Modules下点击 android2u3d ,右侧选择 Dependencies 标签页,点击右侧的加号按钮,选择File Dependency,然后在弹出的对话框中选择libs下classes.jar;或者直接修改这个库对应的build.gradle文件,在dependencies节点下添加一行:

compile files('libs/classes.jar')

3)添加代码

现在开始需要修改 MainActivity.java 文件了,MainActivity需要继承自 UnityPlayerActivity

public class MainActivity extends UnityPlayerActivity {

    private Context mContext = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mContext = this;
    }

    // 定义一个显示对话框的方法,在Unity中调用此方法
    public void ShowDialog(final String mTitle,final String mContent)
    {
        // 在UI线程下执行
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                AlertDialog.Builder mBuilder = new AlertDialog.Builder(MainActivity.this);
                mBuilder.setTitle(mTitle).setMessage(mContent).setPositiveButton("Down", null);
                mBuilder.show();
            }
        });
    }

    // 定义一个显示Toast的方法,在Unity中调用此方法
    public void ShowToast(final String mStr2Show){
        // 同样需要在UI线程下执行
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                Toast.makeText(getApplicationContext(),mStr2Show,Toast.LENGTH_LONG).show();
            }
        });
    }

    // 定义一个手机振动的方法,在Unity中调用此方法
    public void SetVibrator(){
        Vibrator mVibrator=(Vibrator)getSystemService(VIBRATOR_SERVICE);
        mVibrator.vibrate(new long[]{200, 2000, 2000, 200, 200, 200}, -1); //-1:表示不重复 0:循环的震动
    }
}

关于手机的振动,需要修改AndroidManifest.xml文件添加权限的:

<uses-permission android:name="android.permission.VIBRATE"></uses-permission>

4)修改 build.gradle文件导出jar库

打开 build.gradle(Module:android2u3d) 在文件后面追加以下代码:

task makeJar(type: Copy) {
    delete 'build/libs/android2u3d.jar'
    from('build/intermediates/bundles/release/')
    into('build/libs/')
    include('classes.jar')
    rename ('classes.jar', 'android2u3d.jar')
}

makeJar.dependsOn(build)

然后在Terminal窗口中输入* gradlew makeJar* 来导出 android2u3d.jar;导出成功之后会有BUILD SUCCESSFUL 的提示! jar导出成功之后的物理位置在 JarDemo\android2u3d\build\libs

TIPS:
A: 导出之前最好把不需要打包导出的东西统统干掉,比如 dependencies 下的
testCompile ‘junit:junit:4.12’
compile ‘com.android.support:appcompat-v7:23.1.0’
B: 以及Project -> Project -> JarDemo -> app -> src 下的 androidTest 和 test 这两个直接delect删掉。
C:第一次执行 gradlew makeJar 这个命令会下载一些东西不要关闭窗口,等他下载并配置完成之后再执行这个命令!

4.Uniy 部分

1)创建工程

新建一个Unity的工程如叫 JarDemo,在 Assets 下Create Folder 名称为 Plugins ,在这个文件夹下继续创建一个 Android,然后再次在Android 下创建一个文件夹 bin ;然后将上边生成的 android2u3d.jar 拷贝到这个 Assets\Plugins\Android\bin 下,然后将安卓工程下JarDemo\android2u3d\src\main 中的 AndroidManifest.xml 拷贝到 Assets\Plugins\Android目录下。

2)添加脚本

添加C#脚本名称如AndroidAPI,然后添加如下代码:

  void Update () {
        // 返回键退出
        if(Input.GetKey(KeyCode.Escape))
            Application.Quit();
    }
    void OnGUI ()   
    {  
        // 通过API调用对话框 
        if(GUILayout.Button("调用安卓Jar中的函数 ShowDialog !",GUILayout.Height(50)))  
        {  
            // Android的Java接口 
            AndroidJavaClass jc=new AndroidJavaClass("com.unity3d.player.UnityPlayer");  
            AndroidJavaObject jo=jc.GetStatic<AndroidJavaObject>("currentActivity");  
            // 参数 
            string[] mObject=new string[2];  
            mObject[0]="Jar4Android";  
            mObject[1]="Wow,Amazing!It's worked!";  
            // 调用方法 
            jo.Call("ShowDialog",mObject);  
        }  
        // 通过API调用Toast
        if(GUILayout.Button("调用安卓Jar中的函数 ShowToast !",GUILayout.Height(50)))  
        { 
            AndroidJavaClass jc=new AndroidJavaClass("com.unity3d.player.UnityPlayer");  
            AndroidJavaObject jo=jc.GetStatic<AndroidJavaObject>("currentActivity"); 
            jo.Call("ShowToast","Showing on Toast"); 
        }
        // 通过API调用手机震动的方法
        if(GUILayout.Button("调用安卓Jar中的函数 SetVibrator !",GUILayout.Height(50)))  
        { 
            AndroidJavaClass jc=new AndroidJavaClass("com.unity3d.player.UnityPlayer");  
            AndroidJavaObject jo=jc.GetStatic<AndroidJavaObject>("currentActivity"); 
            jo.Call("SetVibrator"); 
        }
    } 

然后将这个 AndroidAPI.cs 拖动到 Main Camera 上进行绑定。

3)真机调试

需要先配置SDK,依次点击菜单栏Edit -> Preferences -> External Tools 在右侧下边的 Android SDK Location 选择你的Android SDK所在目录。

4)构建设置

依次点击菜单栏 File -> Build Settings 在弹出的窗口中切换平台到 Android,右侧 Texture Compression选择 ETC1 or RGBA16(GLES 2.0),同时勾选Development buildAutoconnect profiler这两个复选框。

点击Player Settings 在右侧的Inspector窗口下,常见的需要修改的 Bundle Identifier 等。
除此之外还需要修改下边那个Publishing Settings 中 keystore ,这里我们勾选 Create New KeyCode然后在keystore passwordConfirm password 添加你设置的密码。

5)开始调试

OK,现在使用数据线连接安卓手机,允许调试后,点击Build And Run开始调试吧~

5.分享一下源码做参考

之前上传过一份源码到网盘,忘了在这里贴出来了!源码网盘地址

你可能感兴趣的:(android,android,jar,unity,Studio)