Unity3D——百度地图SDK接入(经验)


一、从Unity中导出安卓工程

导出工程时注意的问题:

(1)PlayerSetting中的bundle identifier要设置一下

Unity3D——百度地图SDK接入(经验)_第1张图片

(2)工程签名的制作

进入DOS界面,进去D:\ProgramFiles\Java\jdk1.6.0_10\bin>目录下,输入keytool -genkey -alias android.keystore -keyalg RSA -validity 100000 -keystore android.keystore参数意义:-validity主要是证书的有效期,写100000天;空格,退格键都算密码。命令执行后会在 D:\ProgramFiles\Java\jdk1.6.0_10\bin 目录下生成android.keystore文件。

(3)导出
Unity3D——百度地图SDK接入(经验)_第2张图片


二、将导出的项目利用eclipse接入百度地图SDK并生成jar包

我的eclipse工程目录:

Unity3D——百度地图SDK接入(经验)_第3张图片

资源的导入是参照百度地图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就可以实现更新;如下图所示:

Unity3D——百度地图SDK接入(经验)_第4张图片

下面是各个文件里面的代码


主入口文件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);
	}
}

MyBaiduMapActivity.java

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



  
  
    
    
      
    
      
        
        
        
      
      			
    
    
    
    
    
    
    
    
	
	
	
	
	
	
	
	
  
	
	
	
	
	
	
	
	
  

Build All 完毕

三、将导出的jar包应用到Unity中,实现SDK接入

需要导入到Unity中的文件(划了黑线的不要,以及armeabi-v7a中libmain.so、libmono.so和libunity.so文件不要):

Unity3D——百度地图SDK接入(经验)_第5张图片

在Unity中的视图结构:

Unity3D——百度地图SDK接入(经验)_第6张图片

必须在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


你可能感兴趣的:(Unity3D,Android)