Unity ios 高德定位

这篇文章主要说的是 Unity 发布ios 接高德定位  获取定位信息  

教程尽量说详细点

稍后配上工程目录

1.登录高德开放平台 主要参照高德文档来   第一步 点击获取key 然后按照里面的教程来很详细,我就不多说了


2.第二步  点击手动部署 注意是手动部署哦 虽然有人说自动部署更好 但是我xcode是个小白一不注意就失败了。所以我选择了手动部署,然后下载我裱起来两个库文件。

3.然后就是打开Unity 创建一个Unity和ios 沟通的脚本  然后发布打包Xcode文件

//定位信息 
        [DllImport("__Internal")]
        private static extern void initStart();//初始定位

        [DllImport("__Internal")]
        private static extern void LocalIos();//获取定位

        string m_szAmapLocal = "0|0";

        //button 开始定位  UNIty创建一个按钮 然后点击按钮响应这个方法
        public void StartAmap()
        {
            initStart();
            LocalIos();
            Debug.Log("Unity  开始定位");
        }

        //button 获取定位 Unity 创建一个按钮 点击响应这个方法
        public void LocateAction()
        {
            Debug.Log("Unity开始苹果获取定位");
            LocalIos();
        }

        //储存地理位置
        public string  AmapLocal()
        {
            return m_szAmapLocal;
        }

        //接受从IOS传来的地理位置
        void LocateIOSGPS(string s)
        {
            m_szAmapLocal = s;
            Debug.Log("[MsgFrom ios]" + s);
        }

然后 按照 手动部署 然后  需要引入的系统库文件  需要申请的权限   ATS设置      高德官方文档很清楚  建议哈 还是按照文档来 

4.打包出来的xcode文件找到 点击.xcodeproj打开项目  将第二步下载的库文件拖到xcode里


然后创建一个AmapUnity.h文件

<Foundation/Foundation.h>

@interface AmapUnity : NSObject

@end

然后创建一个桥梁文件 用来沟通c#和ob语言的 AmapUnity  .m文件

#import "AmapUnity.h"
#import "AmapGaoDe.h"

@implementation AmapUnity

//Unity to  ios  dayin
AmapGaoDe *iapAmap =nil;
void initStart()
{
    NSLog(@"Msg ==========ios 开始定位");
    iapAmap = [[AmapGaoDe alloc] init];
    [iapAmap startActive];
}

void LocalIos()
{
    NSLog(@"Msg ===========获取 定位");
   [iapAmap locateAction];
}

@end

然后 可能.m文件会报错   AmapGaoDe找不到   我们接下来来接高德的SDK了 参照高德官方文档


这块按照你们的项目需求 参照官方文档  我的只是调用了项目需要的一部分

创建了一个AmapGaoDe.h文件  用来沟通之前的.m文件

#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
#import <AMapLocationKit/AMapLocationKit.h>

@interface AmapGaoDe : UIViewController

@property (nonatomic, strong) AMapLocationManager *locationManager;
- (void)startActive;
- (void)locateAction;
@end
然后 创建.m文件  高德的sdk 这个文件里 按照你们项目需求来  比如:我的项目需求就是获取经纬度 然后内容如下


#import "AmapGaoDe.h"
#import <AMapFoundationKit/AMapFoundationKit.h>
#import <AMapLocationKit/AMapLocationKit.h>

@interface AmapGaoDe () <AMapLocationManagerDelegate>

@property (nonatomic, copy) AMapLocatingCompletionBlock completionBlock;

@end

@implementation AmapGaoDe
- (void)startActive
{
    //初始化AMapLocationManager对象,设置代理

    [AMapServices sharedServices].apiKey=@"您的key";

    self.locationManager = [[AMapLocationManager alloc] init];
    
    [self.locationManager setDelegate:self];
    
    // 带逆地理信息的一次定位(返回坐标和地址信息  高精度)
    [self.locationManager setDesiredAccuracy:kCLLocationAccuracyBest];
    //   定位超时时间,最低2s,此处设置为10s
    [self.locationManager setLocationTimeout:10];
    //   逆地理请求超时时间,最低2s,此处设置为10s
    [self.locationManager setReGeocodeTimeout:10];
}
- (void)locateAction
{
    //带逆地理的单次定位
    //带逆地理(返回坐标和地址信息)。将下面代码中的 YES 改成 NO ,则不会返回地址信息。
    [self.locationManager requestLocationWithReGeocode:YES completionBlock:^(CLLocation *location, AMapLocationReGeocode *regeocode, NSError *error) {
        
        if (error)
        {
            NSLog(@"locError:{%ld - %@};", (long)error.code, error.localizedDescription);
            
            NSString *err=@"1|1";
            UnitySendMessage("Main", "LocateIOSGPS",[err UTF8String]);
            
            if (error.code == AMapLocationErrorLocateFailed)
            {
                 return;
            }
            
        }
        
        //定位信息  经纬度
        NSString *lat;
        lat = [NSString stringWithFormat:@"%f|%f",location.coordinate.longitude,location.coordinate.latitude];
        
        UnitySendMessage("Main", "LocateIOSGPS",[lat UTF8String]);
       
        //逆地理信息
        if (regeocode)
        {
            NSLog(@"reGeocode:%@", regeocode);
        }
    }];
}
@end  
我采用的设置是:  高精度  单次定位  获取的值是经纬度 

我们一共是创建了2个.h文件  2个.m文件  一共四个文件 放到Unity 项目的plugins/IOS文件 下次Unity打包Xcode直接就包含这4个文件


猜你喜欢

转载自blog.csdn.net/m0_37583098/article/details/78604329