首先,我们需要一台已经配置好可以开发Android应用的计算机,这里我使用的是Windows系统+Eclipse+ADT的开发环境,当然也可以使用Android Studio或者使用Mac系统都可以。

导出到Eclipse

设置U3D工程

首先需要设置游戏的平台为Android:

在Player Settings...面板中记得设定一下:

这个名称需要设定。

导出Android工程

设定好Android的配置之后,我们需要对Android工程进行导出,我们仍然点击Builder Setting,勾选导出工程:

我们将工程导出到指定的文件夹中,注意我们在导出过程中需要选择Android SDK和JDK的路径。

导入工程

我们打开Eclipse导入当前的工程:

需要注意的是,如果我们当前的Workspace和导出的文件夹一致则会报错“Invalid project description”,解决的办法是,我们导出的文件夹和Workspace的文件夹不一致即可,如下:

如上,我的导出路径是AndroidOutput文件夹,而我的Eclipse的Workspace是Android文件夹。

Unity与平台交互

在Android这边,我们要修改的是UnityPlayerNativeActivity.java文件:

Android调用Unity的方法

可以直接使用静态方法:

UnityPlayer.UnitySendMessage(String arg0, String arg1, String arg2);

我们看看他的3个参数:

  1. 第一个参数:位于场景中的GameObject的名称。
  2. 第二个参数:调用该GameObject身上存在的方法名称。
  3. 第三个参数:传递的参数,这里只能使用字符串类型。

比如:我们场景中存在一个名为“AndroidInterface”的GameObject,同时为其绑定了一个脚本,脚本中存在一个名为“AndroidCallback”的方法,那么我们在Android平台上要调用该方法就可以使用下面的代码:

UnityPlayer.UnitySendMessage("AndroidInterface", "AndroidCallback", "");

有意思的是,Unity中的方法的访问权限不一定要是public的,使用protected及private都可以被调用到。

Unity调用Android的方法

Unity调用Android的方法首先要获取到AndroidJavaObject对象,同时调用的方法必须在UnityPlayerNativeActivity类中定义,我们看看下面的脚本:

 using System;
using UnityEngine; /// <summary>
/// 和 Android 平台交互相关的脚本.
/// </summary>
public class AndroidInterface : MonoBehaviour
{
private static AndroidInterface _instance; public static AndroidInterface GetInstance()
{
if(_instance == null)
{
throw new Exception("AndroidInterface is not initialized!");
}
return _instance;
} private AndroidJavaObject _activity; void Awake()
{
if(_instance != null)
{
throw new Exception("GameDebug is Singleton!");
}
_instance = this; AndroidJavaClass javaClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
_activity = javaClass.GetStatic<AndroidJavaObject>("CurrentActivity");
} /// <summary>
/// 弹出询问是否退出的对话框.
/// </summary>
public void ShowQuitDialog()
{
_activity.Call("showQuitDialog");
} /// <summary>
/// 弹出对话框.
/// </summary>
/// <param name="title">标题.</param>
/// <param name="content">内容.</param>
public void ShowDialog(string title, string content)
{
_activity.Call("showDialog", new string[]{title, content});
}
}

我们通过如下调用即可调用到UnityPlayerNativeActivity类中对应名称的方法了:

AndroidInterface.GetInstance().ShowQuitDialog();

同时,Java方面的方法也可以是protected和private的访问权限,同时传递的参数无限制。

调试程序

(注:我这边使用模拟器运行时会报EGL_emulation的错误,调试实际上是不成功的,但是发布后是可以正常运行的。)

选择“Run”-》“Run”即可。

发布安装包

由于已经作为Android工程所以不能再使用Unity3D来发布了,但是发布比较简单:

选择工程点击右键,“Android Tools”-》“Export Signal Application Package”即可,需要我们使用一个Keystore,没有进行创建即可。

问题总结

导入Android项目失败:http://www.crifan.com/adt_android_invalid_project_description_overlaps_the_location_of_another_project/

Android模拟器启动报错:http://blog.csdn.net/yu413854285/article/details/7559333

Installation error: INSTALL_FAILED_CONTAINER_ERROR:http://www.cnblogs.com/lovecode/articles/3658211.html

Unity3D之移植学习笔记:移植到Android平台的更多相关文章

  1. Unity3D之移植学习笔记:移植到Android平台更好的方法

    接上文,之前我们采用了直接将Unity项目导出为Eclipse项目来修改的方式,这种做法存在的一个最大的问题就是:每当Unity被修改之后,都需要重新导出,而每次导出的项目在Android平台方面的J ...

  2. Android(java)学习笔记267:Android线程池形态

    1. 线程池简介  多线程技术主要解决处理器单元内多个线程执行的问题,它可以显著减少处理器单元的闲置时间,增加处理器单元的吞吐能力.     假设一个服务器完成一项任务所需时间为:T1 创建线程时间, ...

  3. Unity3D之UGUI学习笔记(一):UGUI介绍以及Canvas

    UGUI是Unity3D4.6官方提供的UI系统,支持2D和3D UI的开发. Unity3D UI史 OnGUI 在Unity4.6之前,官方提供的是OnGUI函数来开发UI界面,当然问题也比较多, ...

  4. Android(java)学习笔记211:Android线程池形态

    1. 线程池简介  多线程技术主要解决处理器单元内多个线程执行的问题,它可以显著减少处理器单元的闲置时间,增加处理器单元的吞吐能力.     假设一个服务器完成一项任务所需时间为:T1 创建线程时间, ...

  5. Unity3D之UGUI学习笔记(三):EventSystem

    在UGUI中,EventSystem实现了所有关于交互方面的功能,和NGUI不一样的地方是,我们终于可以摆脱添加Box Collider了! 下面我们来学习一下. 对于按钮来说,直接有onClick的 ...

  6. Android(java)学习笔记124:Android权限大全

    访问登记属性 android.permission.ACCESS_CHECKIN_PROPERTIES读取或写入登记check-in数据库属性表的权限 获取错略位置 android.permissio ...

  7. Android学习笔记_51_转android 加载大图片防止内存溢出

    首先来还原一下堆内存溢出的错误.首先在SD卡上放一张照片,分辨率为(3776 X 2520),大小为3.88MB,是我自己用相机拍的一张照片.应用的布局很简单,一个Button一个ImageView, ...

  8. Android(java)学习笔记64:Android权限大全

    访问登记属性 android.permission.ACCESS_CHECKIN_PROPERTIES读取或写入登记check-in数据库属性表的权限 获取错略位置 android.permissio ...

  9. Android移植学习笔记

    1.一头雾水不知道用什么编译环境,不知道用什么下载软件 编译软件:Ubuntu12.04(编译主机系统),JDK(Java) 下载软件: 模拟器: qemu

随机推荐

  1. UVa 11572 Unique snowflakes【滑动窗口】

    题意:给出 n个数,找到尽量长的一个序列,使得该序列中没有重复的元素 看的紫书,滑动窗口来做的 当右端碰到有相同的数的时候,左端向前滑动一个数 模拟一个样例好理解些 #include<iostr ...

  2. 自定义View等待旋转

    效果图 1 string.xml <string name="default_progressbar">Default Progressbar:</string& ...

  3. symbolicatecrash位置

    symbolicatecrash是一个隐藏工具,它在我的Mac中的具体路径如下(Xcode6.1.app请换成你的Xcode名称) /Applications/Xcode6.1.app/Content ...

  4. 随机变量的方差variance & 随机向量的协方差矩阵covariance matrix

    1.样本矩阵 如果是一个随机变量,那么它的样本值可以用一个向量表示.相对的,如果针对一个随机向量,那么就需要利用矩阵表示,因为向量中的每一个变量的采样值,都可以利用一个向量表示. 然后,一个矩阵可以利 ...

  5. MySQL 索引详解

    本文介绍了数据库索引,及其优.缺点.针对MySQL索引的特点.应用进行了详细的描述.分析了如何避免MySQL无法使用,如何使用EXPLAIN分析查询语句,如何优化MySQL索引的应用. 索引是一种特殊 ...

  6. Ecshop文件结构,二次开发

    文件结构,二次开发有用 ECShop 2.6.2 的结构图及各文件相应功能介绍 ECShop2.6.2 upload 的目录 ┣ activity.php 优惠活动列表 ┣ affiche.php 广 ...

  7. MSSQL 2005数据库与SP4补丁安装

    Sql Server 2005 正确安装之前的win7配置: http://wenku.baidu.com/link?url=6T3jzVnu2XY_sfqfe9ZqQ_6dUOdrZwHc83baW ...

  8. POJ 1423 Big Number

    题意:求n阶乘的位数. 解法:斯特林公式,,然后取log10就是位数了,因为精度问题需要化简这个式子,特判1. 代码: #include<stdio.h> #include<iost ...

  9. POJ 1401 Factorial

    题意:求一个数的阶乘最后边有几个0. 解法:如果有0说明这个数含有2和5这两个因子,对于一个阶乘来说因子2的数量一定比5的数量多,所以只要算有几个5就可以了,依次算5的个数,25的个数,125的个数… ...

  10. POJ 1077 Eight

    题意:经典的八数码=3= 3*3的格子,里面有1~8这8个数字,还有一个空格x,移动空格的位置,直到移到1~8按顺序排好,输出移动的序列. 解法:看到题果断写了个广搜……然后T了……百度了一下说广搜虽 ...