1.下载百度地图样例地址:http://lbsyun.baidu.com/index.php?title=androidsdk

Unity 地图插件 unity接入地图_Unity 地图插件

2.然后解压到如图,获取libs里边儿的jar和.so文件,拷贝出来备用

Unity 地图插件 unity接入地图_Android studio_02


3.然后到as中开始,记录需要注意的地方:如图是需要拷贝进来的各种包,其中classes.jar是unity中搞出来的安卓unity交互的必备jar包

Unity 地图插件 unity接入地图_Unity 地图插件_03

4.as中的代码很少,测试用的就两个类:MainActivity、OpenActivity1, 一个布局文件activity_main,直接上代码

MainActivity
package com.zcst.testactivity2;

 import android.app.Activity;
 import android.content.Context;
 import android.content.Intent;
 import android.os.Bundle;
 import com.unity3d.player.UnityPlayerActivity;


 public class MainActivity extends UnityPlayerActivity {

     Activity mActivity=null;
     Context mContext = null;

     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         mActivity=this;
         mContext = this;
         StartActivity1("我是通过安卓中显示的Activity");
     }

     public void StartActivity1(String name)    {
         // TODO Auto-generated method stub
         Intent intent = new Intent(mContext,OpenActivity1.class);
         intent.putExtra("name", name);
         mActivity.startActivity(intent);
     }
 }OpenActivity1
package com.zcst.testactivity2;

 import android.app.Activity;
 import android.os.Bundle;
 import android.util.Log;
 import com.baidu.mapapi.SDKInitializer;
 import com.baidu.mapapi.map.MapView;

 public class OpenActivity1 extends Activity {
     MapView mMapView = null;

     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);

         Log.i("BaiduActivityTest", "进入了");
         SDKInitializer.initialize(getApplicationContext());
         Log.i("BaiduActivityTest", "初始化完成");
         setContentView(R.layout.activity_main);
         Log.i("BaiduActivityTest", "设置面板完成");
         mMapView = (MapView) findViewById(R.id.id_bmapView);
         Log.i("BaiduActivityTest", "初始化地图完成");
     }
     @Override
     protected void onDestroy()
     {
         super.onDestroy();
         // 在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理
         mMapView.onDestroy();
         mMapView = null;
     }

     @Override
     protected void onResume()
     {
         super.onResume();
         // 在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理
         mMapView.onResume();
     }

     @Override
     protected void onPause()
     {
         super.onPause();
         // 在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理
         mMapView.onPause();
     }
 }
activtiy_main
<?xml version="1.0" encoding="utf-8"?>
 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     tools:context="com.zcst.testactivity2.MainActivity">


     <com.baidu.mapapi.map.MapView
         android:id="@+id/id_bmapView"
         android:layout_width="fill_parent"
         android:layout_height="fill_parent"
         android:clickable="true" />
 </RelativeLayout>

5.感觉这写的只有我能看懂啊,继续粘贴代码吧,要写不下去了!manifest中的权限,还有类的声明,

<uses-permission android:name="android.permission.GET_ACCOUNTS" />
     <uses-permission android:name="android.permission.USE_CREDENTIALS" />
     <uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />
     <uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS" />
     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
     <uses-permission android:name="android.permission.INTERNET" />
     <uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />
     <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
     <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
     <uses-permission android:name="android.permission.READ_PHONE_STATE" />
     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
     <uses-permission android:name="android.permission.BROADCAST_STICKY" />
     <uses-permission android:name="android.permission.WRITE_SETTINGS" />
     <uses-permission android:name="android.permission.READ_PHONE_STATE" />
     
     <application
         android:allowBackup="true"
         android:icon="@mipmap/ic_launcher"
         android:label="@string/app_name"
         android:supportsRtl="true"
         android:theme="@android:style/Theme.NoTitleBar">
         <meta-data
             android:name="com.baidu.lbsapi.API_KEY"
             android:value="百度地图的申请的key" />


         <activity android:name="com.zcst.testactivity2.MainActivity">
             <intent-filter>
                 <action android:name="android.intent.action.MAIN" />


                 <category android:name="android.intent.category.LAUNCHER" />
             </intent-filter>
             <meta-data android:name="unityplayer.UnityActivity" android:value="true" />
         </activity>
         <activity android:name="com.zcst.testactivity2.OpenActivity1"
             android:theme="@android:style/Theme.NoTitleBar.Fullscreen"/>
     </application>

这之前已经将v7包给删除了,导入的v4包(大家都用的v4包,不知道什么原因,as删除v7包会报错,到相应的错误地方修改)

6.下边儿是修改build.gradle,修改成library模式,删除包名,添加框框内的代码

Unity 地图插件 unity接入地图_Android studio_04

7.找到app_debug.aar 文件,复制出来,然后解压会得到相应的unity需要的资源

Unity 地图插件 unity接入地图_Android studio_05

如图先将libs中的classes.jar删除,将外部的classes.jar放进libs,接着进入到jni目录

Unity 地图插件 unity接入地图_百度地图_06

将黄色框中的三个文件夹也拷贝到libs中

Unity 地图插件 unity接入地图_Android studio_07

8.然后unity新建项目,建文件夹如图,将上边准备好的libs、res 、AndroidManifest.xml直接拖到Android文件夹下边

Unity 地图插件 unity接入地图_Android studio_08


最后注意如图有一个assets文件,这个文件不找到的话,项目会闪退,最前边的时候准备过几个百度地图的jar包,这时候回到前边去找到其中一个名字为baidumaapi_map_v4_XX_XX.jar(也就是as里用的那个,不要用刚刚拷贝到unity中的那个),然后将后缀改为.rar,然后解压,里边儿有个assets文件夹没直接拷贝到unity文件夹的Android下边。

然后,是c#代码,用来和安卓代码交互用的,挂载到相机上。编写名字为js001的C#文件,内容:

using UnityEngine;  
 using System.Collections;  


 public class js001 : MonoBehaviour {  

private AndroidJavaObject m_activity;  

// Use this for initialization  
void Start () {  

AndroidJavaClass jc = new AndroidJavaClass ("com.unity3d.player.UnityPlayer");  
m_activity = jc.GetStatic<AndroidJavaObject> ("currentActivity");  


}  


void OnGUI(){  
//call hello world  
if(GUI.Button(new Rect(50,50,200,40),"Open Activity")){  
m_activity.Call("StartActivity1","Unity中调出android的方法了");  
}  

//quit  
if(Input.GetKey(KeyCode.Escape)||Input.GetKey(KeyCode.Home)){  
Application.Quit();  
}  
}  

// Update is called once per frame  
void Update () {  

}  
 }

最后修改unity项目的包名和安卓项目的包名一致,然后打包,上真机运行,不出意外的话,能成功。