接上文,之前我们采用了直接将Unity项目导出为Eclipse项目来修改的方式,这种做法存在的一个最大的问题就是:每当Unity被修改之后,都需要重新导出,而每次导出的项目在Android平台方面的Java代码又需要重新编写对应的功能,这样开发效率会受到极大的影响,所以这里我们使用另外一种方式来移植,使Unity和Android方面的修改可以互不影响。
Unity3D项目
我们新建一个Unity3D的项目,并为其添加两个按钮和一个文本框,同时将下面的脚本挂载到摄像机中即可:
1 using UnityEngine; 2 using UnityEngine.UI; 3 4 public class SceneScript : MonoBehaviour 5 { 6 public Text outpuText; 7 8 //与 Android 交互的对象 9 private AndroidJavaObject _activity; 10 11 void Start() 12 { 13 //获取与 Android 交互的对象 14 AndroidJavaClass javaClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); 15 _activity = javaClass.GetStatic<AndroidJavaObject>("currentActivity"); 16 } 17 18 public void ShowDialog() 19 { 20 _activity.Call("showDialog", new string[]{"提示", "我是被Unity调用的对话框!"}); 21 } 22 23 public void CallAndroid() 24 { 25 _activity.Call("unityCall"); 26 } 27 28 /// <summary> 29 /// 该方法由 Android 调用. 30 /// </summary> 31 /// <param name="msg">传递过来的参数.</param> 32 private void AndroidCallback(string msg) 33 { 34 outpuText.text += "\n" + msg; 35 } 36 }
记住Bundle Identifier一定要设定,同时要记住该设定值,我们在创建Android应用时填写的Package Name必须填写同该值一样的值。
Android项目
我们先创建一个Android项目:
需要注意的是,Package Name必须和Unity3D中的Bundle Identifier一致。
勾选红框内的内容,表示作为库工程。
接下来的几步默认即可。
报错处理
我这里使用的是Android5.0的SDK,莫名其妙的新建项目会报错,搞得头大,最后找到的解决方法是第一步创建项目时,选择Mininum Required SDK为API16及以上的版本即可,如果有遇到同样问题的同学可以试试这个办法。
我们创建好Android库项目后,它和Unity之间是无法调用的,我们还需要引入Unity为Android平台提供的库文件,路径如下:你的unity安装目录\Editor\Data\PlaybackEngines\androidplayer\release\bin\classes.jar
打开MainActivity修改为下面的代码:
1 package com.Hammerc.AndroidTest; 2 3 import com.unity3d.player.UnityPlayer; 4 import com.unity3d.player.UnityPlayerActivity; 5 6 import android.app.AlertDialog; 7 import android.os.Bundle; 8 9 //修改继承关系, 改为继承自 UnityPlayerActivity 10 public class MainActivity extends UnityPlayerActivity { 11 12 @Override 13 protected void onCreate(Bundle savedInstanceState) { 14 super.onCreate(savedInstanceState); 15 } 16 17 private void showDialog(final String title, final String content) 18 { 19 runOnUiThread(new Runnable() 20 { 21 @Override 22 public void run() 23 { 24 makeDialog(title, content); 25 } 26 }); 27 } 28 29 private void makeDialog(String title, String content) 30 { 31 AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); 32 33 builder.setTitle(title); 34 builder.setMessage(content); 35 builder.setCancelable(false); 36 builder.setPositiveButton("确定", null); 37 38 builder.show(); 39 } 40 41 private void unityCall() 42 { 43 UnityPlayer.UnitySendMessage("Main Camera", "AndroidCallback", "我是Android平台发送的消息!"); 44 } 45 }
在菜单中选择“Project”->“Clean”,即可在bin文件夹下找到我们的androidtest.jar文件了。
导入jar到Unity中
新建Plugins\Android文件夹,并将androidtest.jar文件拷贝到该文件夹中,注意文件夹名称必须为该名称。
接下来我们需要去你的unity安装目录\Editor\Data\PlaybackEngines\androidplayer目录下复制AndroidManifest.xml文件到Plugins\Android文件夹中。
打开AndroidManifest.xml文件,修改:
1 <activity android:name="com.unity3d.player.UnityPlayerNativeActivity"
为
1 <activity android:name="com.Hammerc.AndroidTest.MainActivity"
接下来直接发布为apk文件即可。