unity3D开发:手把手带你接入百度地图sdk
接入unity sdk如果只需要在unity里进行,那问题还不大,要是得调用Java代码,那就不得不在AndroidStudio里进行操作了。比如百度地图的sdk,只提供了Android/IOS/Web/HarmonyOS的sdk,没有unity直接能用的,那我们只得将unity工程导出为Android Gradle,然后在AndroidStudio里编写Java代码,再打成apk包发布。接下来进行unity百度地图sdk的接入。
一、打开Android Studio,创建一个空工程。
我们需要创建一个release版本。选择 build 菜单,创建一个app bundle。如下图所示。在key store 那里可以创建一个Keystore文件用于签名。记住你的密码,后面会用到。
二、获得百度sdk
首先登录https://lbsyun.baidu.com/,注册成为百度开发者,然后创建一个地图sdk应用。如图
按提示设置sha1值,其中发布版的keystore文件是你自己创建keystore时设置的文件,不是cmd里进去默认的那个,在你自己keystore目录下打开命令行窗口。口令密码也是你自己设置的keystore密码。复制realesed的sha1值。
应用包名要和unity工程的bundle Identifier一致,这里使用如下举例
然后就是下载sdk(这里选择jar包),选择最基础的功能就行。
三、将百度地图sdk导入进unity工程中*,拖一个简单的UI界面,编写代码。
其中地图按钮的脚本如下图所示。其余部分代码(比如退出按钮)不是重点,这部分操作应该都会吧:
在unity里调用我们将在AndroidStudio里编写的Unity2AndroidFunc()方法。然后把下载下来的百度地图sdk打开,复制我们要用到的jar和so文件。
在unity里的Assets目录下新建Plugins/Android/libs,将复制的文件粘贴过来。
然后设置导出为Android模式,导出为Android Gradle。
*注:如果是纯Android开发,可以直接在AndroidStudio里添加sdk文件,但我们这里是用unity3D开发,就先把百度地图sdk添加进unity工程里,这样导出为Gradle工程时会将百度地图sdk一起导出来。用AndroidStudio打开工程后,so文件会被自动加入到jniLibs里,不需要我们再次进行sdk的导入了。
四、用AndroidStudio打开从unity导出的Gradle文件。如下图所示:
默认包名就是 com.unity3d.player,与我们的百度地图应用包名一致。接下来要改动4个文件。
(1)选中 UnityPlayerActivity,加入如下代码:
protected void Unity2AndroidFunc(final String param1, final String param2){
runOnUiThread(() -> ShowBaiduMap(param1, param2));
}
public void ShowBaiduMap(final String param1, final String param2){
// 显示地图
startActivity(new Intent(UnityPlayerActivity.this, MapActivity.class));
}
(2)创建一个Activity,名字就叫MapActivity(注意是Java文件,不是Kotlin),这个就是点击地图后显示的Activity。
代码如下:
package com.unity3d.player;
import android.app.Activity;
import android.os.Bundle;
import com.baidu.mapapi.SDKInitializer;
import com.baidu.mapapi.map.MapStatus;
import com.baidu.mapapi.map.MapStatusUpdateFactory;
import com.baidu.mapapi.map.MapView;
import com.baidu.mapapi.map.TextOptions;
import com.baidu.mapapi.model.LatLng;
public class MapActivity extends Activity {
private MapView mMapView = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//step1:必不可少
SDKInitializer.setAgreePrivacy(getApplicationContext(),true);
//step2:在使用SDK各组件之前初始化context信息,传入ApplicationContext
//注意该方法要再setContentView方法之前实现
SDKInitializer.initialize(getApplicationContext());
setContentView(R.layout.activity_map);
//获取地图控件引用
mMapView = findViewById(R.id.bmapView);
var baidumap = mMapView.getMap();
//定义文字所显示的坐标点
var llText = new LatLng(30.490302,104.068432);
var textOption = new TextOptions()
.bgColor(0xAAFFFF00)
.fontSize(35)
.fontColor(0xFFFF00FF)
.text("成都华阳客运站")
.rotate(0)
.position(llText);
baidumap.addOverlay(textOption);
var mapStatus = new MapStatus.Builder().target(llText).zoom(18).build();
var manStatusUpdate = MapStatusUpdateFactory.newMapStatus(mapStatus);
baidumap.setMapStatus(manStatusUpdate);
}
@Override
protected void onResume() {
super.onResume();
//在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理
mMapView.onResume();
}
@Override
protected void onPause() {
super.onPause();
//在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理
mMapView.onPause();
}
@Override
protected void onDestroy() {
super.onDestroy();
//在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理
mMapView.onDestroy();
}
}
(3)创建一个布局文件activity_map.xml:
代码如下:
(4)最后,修改AndroidManifest.xml文件。![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/b46ea3fa90de4137abc54905f4c9997e.png)
加入MapActivity:
以及权限相关(可从百度地图开发指南里复制):
至此已经全部完成了。直接运行。
完美!