首先,我们需要一台已经配置好可以开发Android应用的计算机,这里我使用的是Windows系统+Eclipse+ADT的开发环境,当然也可以使用Android Studio或者使用Mac系统都可以。
首先需要设置游戏的平台为Android:
在Player Settings...面板中记得设定一下:
这个名称需要设定。
设定好Android的配置之后,我们需要对Android工程进行导出,我们仍然点击Builder Setting,勾选导出工程:
我们将工程导出到指定的文件夹中,注意我们在导出过程中需要选择Android SDK和JDK的路径。
我们打开Eclipse导入当前的工程:
需要注意的是,如果我们当前的Workspace和导出的文件夹一致则会报错“Invalid project description”,解决的办法是,我们导出的文件夹和Workspace的文件夹不一致即可,如下:
如上,我的导出路径是AndroidOutput文件夹,而我的Eclipse的Workspace是Android文件夹。
在Android这边,我们要修改的是UnityPlayerNativeActivity.java文件:
可以直接使用静态方法:
登录后复制
UnityPlayer.UnitySendMessage(String arg0, String arg1, String arg2);
我们看看他的3个参数:
比如:我们场景中存在一个名为“AndroidInterface”的GameObject,同时为其绑定了一个脚本,脚本中存在一个名为“AndroidCallback”的方法,那么我们在Android平台上要调用该方法就可以使用下面的代码:
登录后复制
UnityPlayer.UnitySendMessage("AndroidInterface", "AndroidCallback", "");
有意思的是,Unity中的方法的访问权限不一定要是public的,使用protected及private都可以被调用到。
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,没有进行创建即可。
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删