Unity3D之移植学习笔记:移植到Android平台

首先,我们需要一台已经配置好可以开发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类中定义,我们看看下面的脚本:

 1 using System;
 2 using UnityEngine;
 3
 4 /// <summary>
 5 /// 和 Android 平台交互相关的脚本.
 6 /// </summary>
 7 public class AndroidInterface : MonoBehaviour
 8 {
 9     private static AndroidInterface _instance;
10
11     public static AndroidInterface GetInstance()
12     {
13         if(_instance == null)
14         {
15             throw new Exception("AndroidInterface is not initialized!");
16         }
17         return _instance;
18     }
19
20     private AndroidJavaObject _activity;
21
22     void Awake()
23     {
24         if(_instance != null)
25         {
26             throw new Exception("GameDebug is Singleton!");
27         }
28         _instance = this;
29
30         AndroidJavaClass javaClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
31         _activity = javaClass.GetStatic<AndroidJavaObject>("CurrentActivity");
32     }
33
34     /// <summary>
35     /// 弹出询问是否退出的对话框.
36     /// </summary>
37     public void ShowQuitDialog()
38     {
39         _activity.Call("showQuitDialog");
40     }
41
42     /// <summary>
43     /// 弹出对话框.
44     /// </summary>
45     /// <param name="title">标题.</param>
46     /// <param name="content">内容.</param>
47     public void ShowDialog(string title, string content)
48     {
49         _activity.Call("showDialog", new string[]{title, content});
50     }
51 }

我们通过如下调用即可调用到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

时间: 2024-10-07 09:47:39

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

css学习笔记.1--以校园资讯平台为例

#id .class 这两个是最先要记住的..id是<a id="Sth">中的Sth,class是<ul class="Oth">中的Oth,挺好记得 margin 老记成marign...看来是align害的,介绍是"层的边框以外留的空白"-以下图片来自 这里 如图: 就是说最外层的是margin,最内层的是padding,是盒模型{主要定义四个区域:内容(content).边框距(padding).边界(border

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

UGUI是Unity3D4.6官方提供的UI系统,支持2D和3D UI的开发. Unity3D UI史 OnGUI 在Unity4.6之前,官方提供的是OnGUI函数来开发UI界面,当然问题也比较多,首先不支持可视化开发,其次UI始终位于所有3D对象的上方,无法实现在UI上添加3D模型的效果. 现在一般这套系统多用来在Unity编辑器中开发界面或者快速搭建一些调试界面时使用. NGUI 大名鼎鼎的NGUI是可以看做是开发Unity游戏必备的插件,支持可视化开发,同时也支持2D和3D UI的开发,

Android(java)学习笔记106:Android XML解析

在Android平台上可以使用Simple API for XML(SAX) . Document Object Model(DOM)和Android附带的pull解析器解析XML文件. 下面是本例子要解析的XML文件: 文件名称:itcast.xml <?xml version="1.0" encoding="UTF-8"?> <persons> <person id="23"> <name>李明

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

访问登记属性 android.permission.ACCESS_CHECKIN_PROPERTIES读取或写入登记check-in数据库属性表的权限 获取错略位置 android.permission.ACCESS_COARSE_LOCATION通过WiFi或移动基站的方式获取用户错略的经纬度信息定位精度大概误差在30~1500米 获取精确位置 android.permission.ACCESS_FINE_LOCATION通过GPS芯片接收卫星的定位信息定位精度达10米以内 访问定位额外命令

Unity3D之ScriptableObject学习笔记

不同与C#提供的Serializable序列化功能,ScriptableObject是Unity3D提供的一个数据存储类,我们接下来学习一下这个类的功能. 官方文档 http://docs.unity3d.com/Manual/class-ScriptableObject.html http://docs.unity3d.com/ScriptReference/ScriptableObject.html 使用情景 在Unity3D中,我们记录游戏的配置数据可以使用文件文件(XML.JSON等格式

Android(java)学习笔记264:Android下的属性动画高级用法(Property Animation)

1. 大家好,在上一篇文章当中,我们学习了Android属性动画的基本用法,当然也是最常用的一些用法,这些用法足以覆盖我们平时大多情况下的动画需求了.但是,正如上篇文章当中所说到的,属性动画对补间动画进行了很大幅度的改进,之前补间动画可以做到的属性动画也能做到,补间动画做不到的现在属性动画也可以做到了.因此,今天我们就来学习一下属性动画的高级用法,看看如何实现一些补间动画所无法实现的功能. 2. ValueAnimator的高级用法: 在上篇文章中介绍补间动画缺点的时候有提到过,补间动画是只能对

Android(java)学习笔记115:Android InputMethodManager输入法简介

正文 一.结构 public final class InputMethodManager extends Object Java.lang.Object android.view.inputmethod.InputMethodManager 二.类概述 整个输入法框架(IMF)结构的核心API,应用程序之间进行调度和当前输入法交互.你可以用Context.getSystemService()取得这一接口的实例. 架构总述(Architecture Overview) 输入法框架(IMF)共有三

Android(java)学习笔记263:Android下的属性动画(Property Animation)

1. 属性动画(Property Animation)引入: 在手机上去实现一些动画效果算是件比较炫酷的事情,因此Android系统在一开始的时候就给我们提供了两种实现动画效果的方式,逐帧动画(frame-by-frame animation)和补间动画(tweened animation). 逐帧动画的工作原理很简单,其实就是将一个完整的动画拆分成一张张单独的图片,然后再将它们连贯起来进行播放,类似于动画片的工作原理. 补间动画则是可以对View进行一系列的动画操作,包括淡入淡出.缩放.平移.

Android(java)学习笔记95:Android原理揭秘系列之View、ViewGroup

作过Android 应用开发的朋友都知道,Android的UI界面都是由View和ViewGroup及其派生类组合而成的.其中,View是所有UI组件的基类,而ViewGroup是容纳这些组件的容器,其本身也是从View派生出来的.AndroidUI界面的一般结构可参见下面的示意图: 可见,作为容器的ViewGroup可以包含作为叶子节点的View,也可以包含作为更低层次的子ViewGroup,而子ViewGroup又可以包含下一层的叶子节点的View和ViewGroup.事实上,这种灵活的Vi