unity无法调用android,Unity调用Android

参考文献:[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对应上。

大功告成!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值