天天看點

Unity ios 高德定位

這篇文章主要說的是 Unity 釋出ios 接高德定位  擷取定位資訊  

教程盡量說詳細點

稍後配上工程目錄

1.登入高德開放平台 主要參照高德文檔來   第一步 點選擷取key 然後按照裡面的教程來很詳細,我就不多說了

Unity ios 高德定位

2.第二步  點選手動部署 注意是手動部署哦 雖然有人說自動部署更好 但是我xcode是個小白一不注意就失敗了。是以我選擇了手動部署,然後下載下傳我裱起來兩個庫檔案。

Unity ios 高德定位

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裡

Unity ios 高德定位

然後建立一個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了 參照高德官方文檔

Unity ios 高德定位

這塊按照你們的項目需求 參照官方文檔  我的隻是調用了項目需要的一部分

建立了一個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][email protected]"您的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 *[email protected]"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個檔案