参考文献:[http://www.it165.net/pro/html/201409/22272.html](http://www.it165.net/pro/html/201409/22272.html)
参考文献:http://www.thegamecontriver.com/2015/04/android-plugin-unity-android-studio.html
Unity和Android交互通常有两种方式:
1、Unity调用Android平台编写的插件;
2、将Unity项目导出为Android项目,然后放入Android中编写。
首先介绍第一种方法。
一、为Unity编写Android插件
用Eclipse编写一个Java的库文件(.Jar),在这个库文件中我们会封装一系列的方法来为Unity提供接口,我们将这个库文件导出后可以将其放置到一个特定的目录下(Plugins/Android),然后我们就可以利用Unity提供的API来调用这些方法。
创建Android项目,包名为:com.android.android2unity,这个包名很重要,我们在Unity中将用到这个包名。
导入Unity为Android提供的一个库,主要提供了支持该平台的Player。
由于使用了最新版Unity,我找不到该库,所以先用Unity创建一个Android Project,
然后从中找到了该库:unity-classes.jar。
~~~package android.android2unity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.Intent;
import android.os.Vibrator;
import android.os.Bundle;
import com.unity3d.player.UnityPlayer;
import com.unity3d.player.UnityPlayerActivity;
//如果需要Android与Unity对接,可以通过继承UnityPlayerActivity来实现
public class MainActivity extends UnityPlayerActivity {
private Context mContext;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// setContentView(R.layout.activity_main);
mContext = this;
}
//Android中调用Unity中方法的方法
//UnitySendMessage方法
public void InvokeUnity(String string){
UnityPlayer.UnitySendMessage("Vabille","SetCameraColor","");
}
//定义一个打开Activity的方法,将在Unity中调用
public void StartWebView(String url){
Intent intent = new Intent(mContext,WebActivity.class);
intent.putExtra("URL",url);
startActivity(intent);
}
//定义一个现实对话框的方法,将在Unity中调用
public void ShowDialog(final String title,final String content){
//在UI线程下执行相关方法
runOnUiThread(new Runnable() {
@Override
public void run() {
AlertDialog.Builder builder = new AlertDialog.Builder(mContext);
builder.setTitle(title).setMessage(content).setPositiveButton("确定", null);
builder.show();
}
});
}
//定义一个使设备震动的方法
public void SetVibrator(long time){
Vibrator vibrator = (Vibrator) getSystemService(VIBRATOR_SERVICE);
vibrator.vibrate(time);
}
}
~~~
还有WebViewActiviy编写用于打开网页。
在AndroidMenifest中注册,以及添加权限:
最后,将Android插件输入为jar库。在这里要注意的是,所有的Java类、Android生成的配置文件类(如属性、布局、值等)都要编译。
使用Android Studio到处jar库方法为:
[http://www.kancloud.cn/hujunjob/android/139575](http://www.kancloud.cn/hujunjob/android/139575)
插件导出成功,则可以在Unity中使用了。
二、Unity中使用Android插件
参考文献:[http://www.cnblogs.com/wanqieddy/p/4447594.html](http://www.cnblogs.com/wanqieddy/p/4447594.html)
下面请大家按照这样的结构来组织Android插件的目录:
----------Assets
----Plugins
-----Android
-----bin(存放导出的Jar)
-----libs(存放第三方的库)
-----res(资源文件夹,可直接复制Android项目)
-----AndroidManifest.xml(配置文件,可直接复制Android项目)
![](https://box.kancloud.cn/2016-04-11_570bc37dd0689.png)
编写C#脚本
~~~using UnityEngine;
using System.Collections;
public class androidapi : MonoBehaviour {
// Use this for initialization
void Start () {
//设置当前游戏体的名字,在Android中将使用这个名字
this.name = "Vabille";
}
// Update is called once per frame
void Update () {
}
//定义一个改变摄像机背景颜色的方法,在ANdroid中调用了该方法
void SetCameraColor(){
//设置摄像机背景颜色
Camera.main.backgroundColor=new Color(1f,0.5f,0.5f);
}
void OnGUI(){
if(GUILayout.Button ("调用Android API显示对话框",GUILayout.Height (45)))
{
//获取Android的Java接口
AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject jo = jc.GetStatic ("currentActivity");
//构造Android API方法中的参数
string[] androidparams = new string[2];
androidparams [0] = "Unity3D";
androidparams [1] = "Unity3D 调用Android";
//调用Android中定义的方法
jo.Call ("ShowDialog",androidparams);
}
//通过传值打开Activity
if(GUILayout.Button("调用Android API中打开Activity",GUILayout.Height(45)))
{
//获取Android的Java接口
AndroidJavaClass jc=new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject jo=jc.GetStatic("currentActivity");
//打开博主的博客
jo.Call("StartWebView","http://www.baidu.com");
}
if(GUILayout.Button("调用Android API中的震动方法",GUILayout.Height(45)))
{
//获取Android的Java接口
AndroidJavaClass jc=new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject jo=jc.GetStatic("currentActivity");
//打开博主的博客
jo.Call("SetVibrator",40);
}
//通过Android API,调用Unity本身的方法
if(GUILayout.Button("通过SendMessage调用Unity中的方法",GUILayout.Height(45)))
{
//获取Android的Java接口
AndroidJavaClass jc=new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject jo=jc.GetStatic("currentActivity");
//打开博主的博客
jo.Call("InvokeUnity","");
}
}
}
~~~
之后发布为Android版本,
设置PlayerSetting,要与Android的package对应上。
大功告成!