根据前人及大神的教程,这次博客分享下本人对Unity和Android交互的实践与总结,分享下亲身踩坑的经历。
首先,介绍下工具和环境
System:Windows 8.1 Pro(64bit)
Unity Version:Unity 5.6.0f3(64bit)
IDE:
①Visual Studio Ultimate 2013
②Eclipse Mars.2 Release (4.5.2)
③Android Studio 2.3.1
JDK Version:1.8.0_121
SDK Version:25.2.3
测试机Android版本:4.4.2
目录:
一、 AndroidStudio和Unity交互(导出ARR包)
二、 Eclipse和Unity交互(导出JAR包)
三、 AndroidStudio遇到的坑(错误解决方案)
四、 Unity遇到的坑(错误解决方案)
一、 先来聊聊AndroidStudio和Unity交互
1.创建你的Unity 项目 并设置player settings → settings for Android → Identification → Package Name(包名) 和 Minimum API Level(最低支持的Android API版本)
2.创建AndroidStudioProject
3.添加依赖库并设置依赖关系
(1) 依赖库位置:
…\Unity 5.6.0f3\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Classes
(2) 将Classer.jar Cope到 libs 目录下。(本身是空的文件夹)
(3) 右键项目 选择 Open Module Settings 或者直接按F4 打开 Project Structure窗口,并设置 Dependencies(依赖关系)。
4.编辑MainActivity.java
修改 MainActicity extends(继承)UnityPlayerActivity,然后编写功能
注释 setContentView(R.layout.activity_main);
package com.nick.unitytest;
import android.app.AlertDialog;
import android.os.Bundle;
import android.os.Vibrator;
import android.widget.Toast;
import com.unity3d.player.*;
public class MainActivity extends UnityPlayerActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//setContentView(R.layout.activity_main);
}
// 定义一个显示Dialog的方法,在Unity中调用此方法
public String ShowDialog(final String _title, final String _content){
runOnUiThread(new Runnable() {
@Override
public void run() {
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setTitle(_title).setMessage(_content).setPositiveButton("Down", null);
builder.show();
}
});
return "Java return";
}
// 定义一个显示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:循环的震动
}
// 第一个参数是unity中的对象名
// 第二个参数是函数名
// 第三个参数是传给函数的参数,目前只看到一个参数,并且是string
public