一、从Unity中导出安卓工程
导出工程时注意的问题:
(1)PlayerSetting中的bundle identifier要设置一下
(2)工程签名的制作
二、将导出的项目利用eclipse接入百度地图SDK并生成jar包
我的eclipse工程目录:
资源的导入是参照百度地图SDK接入指南的:http://lbsyun.baidu.com/index.php?title=androidsdk/guide/introduction
其中res/layout下的布局xml文件来自下载的BaiduLBS_AndroidSDK_Sample,具体路径是BaiduLBS_AndroidSDK_Sample\BaiduMap_AndroidSDK_v4.1.1_Sample\BaiduMapsApiDemo\res\layout
bin目录下生成了jar文件是原理:鼠标工程名字上右键Properties属性,勾选Is Library,之后在每次Project/Build All就可以实现更新;如下图所示:
下面是各个文件里面的代码
主入口文件MainActivity.java
package com.zhf;
import android.content.Intent;
import android.os.Bundle;
import com.unity3d.player.UnityPlayerActivity;
public class MainActivity extends UnityPlayerActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
public String getStringInJava() {
return "i am a string from java";
}
public void OpenNewScene() {
Intent intent = new Intent(MainActivity.this, EmptyScene.class);
this.startActivity(intent);
}
public void OpenBaiduMap() {
Intent intent = new Intent(MainActivity.this, MyBaiduMapActivity.class);
this.startActivity(intent);
}
}
EmptyScene.java
package com.zhf;
import android.app.Activity;
import android.os.Bundle;
public class EmptyScene extends Activity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
}
package com.zhf;
import com.baidu.mapapi.SDKInitializer;
import com.baidu.mapapi.map.MapView;
import android.app.Activity;
import android.os.Bundle;
public class MyBaiduMapActivity extends Activity {
MapView mMapView = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
SDKInitializer.initialize(getApplicationContext());
setContentView(R.layout.activity_main);
mMapView = (MapView) findViewById(R.id.bmapView);
}
@Override
protected void onDestroy() {
super.onDestroy();
//在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理
mMapView.onDestroy();
}
@Override
protected void onResume() {
super.onResume();
//在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理
mMapView.onResume();
}
@Override
protected void onPause() {
super.onPause();
//在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理
mMapView.onPause();
}
}
布局文件Activity_main.xml
主配置文件AndroidManifest.xml
三、将导出的jar包应用到Unity中,实现SDK接入
需要导入到Unity中的文件(划了黑线的不要,以及armeabi-v7a中libmain.so、libmono.so和libunity.so文件不要):
在Unity中的视图结构:
必须在Plugins下面的Android目录下,注意assets是来自这里:
上面assets目录没有放到Unity工程中,程序运行了就崩溃,耗了一天时间找bug
四、编写C#脚本,实现交互
完成上面的之后新建一个场景,加入一个UGUI的Text控件,新建一个脚本Test
Test.cs代码:
using UnityEngine;
using UnityEngine.UI;
using System.Collections;
public class Test : MonoBehaviour {
public Text text;
void Update () {
if (Input.GetKeyDown(KeyCode.Escape) || Input.GetKeyDown(KeyCode.Home)) {
Application.Quit();
}
}
void OnGUI() {
if (GUILayout.Button("Open Map", GUILayout.Height(100)))
{
AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject jo = jc.GetStatic("currentActivity");
jo.Call("OpenBaiduMap");
}
if (GUILayout.Button("Open New Scene", GUILayout.Height(100)))
{
AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject jo = jc.GetStatic("currentActivity");
jo.Call("OpenNewScene");
}
if (GUILayout.Button("改变Label___New", GUILayout.Height(100)))
{
AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject jo = jc.GetStatic("currentActivity");
text.text = jo.Call("getStringInJava");
}
}
}
脚本挂载在相机上,Text控件拖上去,然后开始打包
打包时注意:Player Setting中的 bundle identifier要填上对应的包名
end