国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Unity 獲取手機(jī)地理位置信息

這篇具有很好參考價(jià)值的文章主要介紹了Unity 獲取手機(jī)地理位置信息。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

Unity 獲取手機(jī)地理位置信息

引言

在游戲的開(kāi)發(fā)過(guò)程中,有時(shí)候會(huì)遇到需要獲取玩家位置信息的需求,比如顯示玩家所在的國(guó)家城市等。

有一下方法可以參考:

  • 可以根據(jù)手機(jī)的地區(qū)和語(yǔ)言來(lái)做判斷。

  • 根據(jù)IP來(lái)判斷所處的位置,阿里云啥的都有對(duì)應(yīng)的接口服務(wù)。

  • 根據(jù)GPS來(lái)判斷。

以上方法都各有利弊吧,這里簡(jiǎn)單介紹下根據(jù)GPS來(lái)處理的方案。

實(shí)現(xiàn)

Unity中不提供直接獲取玩家在哪個(gè)國(guó)家哪座城市的功能,只提供獲取一些GPS信息的功能,這樣我們就需要根據(jù)GPS信息來(lái)獲取具體的國(guó)家城市,需要借助一些第三方插件來(lái)實(shí)現(xiàn)。

Unity獲取用戶(hù)的經(jīng)緯度信息

官方文檔:Unity - Scripting API: LocationService.Start (unity3d.com)

我根據(jù)官方文檔做了一些修改,在請(qǐng)求權(quán)限的時(shí)候因?yàn)槭褂玫腢nity2019,Unity提供的接口還不支持回調(diào)返回,所以這里做了一些處理。

完整代碼如下:

using System.Collections;
using System.Collections.Generic;
using System.Runtime.CompilerServices;
using UnityEngine;
using UnityEngine.Android;
using UnityEngine.Events;

/// <summary>
/// GPS位置管理器
/// </summary>
public class LocationManager : MonoBehaviour
{
    #region 單例
    public static LocationManager _Instance;
    public static LocationManager Instance
    {
        get
        {
            if (_Instance == null)
            {
                GameObject obj = new GameObject("LocationManager");
                _Instance = obj.AddComponent<LocationManager>();
                DontDestroyOnLoad(obj);
            }
            return _Instance;
        }
    }

    #endregion

    /// <summary>
    /// 超時(shí)時(shí)間
    /// 20秒
    /// </summary>
    private const float Time_Out = 20;

    /// <summary>
    /// 啟動(dòng)成功回調(diào)
    /// </summary>
    public event UnityAction<LocationInfo> SuccessCallback;

    /// <summary>
    /// 失敗回調(diào)
    /// </summary>
    public event UnityAction<string> FailureCallback;

    /// <summary>
    /// 刷新回調(diào)
    /// </summary>
    public event UnityAction<LocationInfo> UpdateCallback;

    /// <summary>
    /// 停止回調(diào)
    /// </summary>
    public event UnityAction StoppedCallback;

    /// <summary>
    /// 是否開(kāi)始
    /// </summary>
    private bool _IsStarted = false;

    // Start is called before the first frame update
    void Start()
    {

    }

    // Update is called once per frame
    void Update()
    {
        if (Input.location.status == LocationServiceStatus.Running)
        {
            OnUpdate(Input.location.lastData);
        }
#if UNITY_ANDROID && !UNITY_EDITOR
        if (UnityEngine.Android.Permission.HasUserAuthorizedPermission(UnityEngine.Android.Permission.FineLocation))
        {
            StartGPS();
        }
#endif
    }

    /// <summary>
    /// 申請(qǐng)權(quán)限
    /// </summary>
    public static void RequestPermission()
    {
#if UNITY_ANDROID && !UNITY_EDITOR
        string permission = UnityEngine.Android.Permission.FineLocation;
        if (!UnityEngine.Android.Permission.HasUserAuthorizedPermission(permission))
        {
            UnityEngine.Android.Permission.RequestUserPermission(permission);
        }
#endif
    }

    /// <summary>
    /// 初始化
    /// </summary>
    public void Init()
    {
        RequestPermission();
        StartGPS();
    }

    /// <summary>
    /// 開(kāi)始定位
    /// </summary>
    private void StartGPS()
    {
        if (!Input.location.isEnabledByUser)
        {
            OnError("用戶(hù)沒(méi)有權(quán)限");
            return;
        }
        if (_IsStarted)
        {
            return;
        }
        _IsStarted = true;
        Input.location.Start();
        StartCoroutine(GetGPS());
    }
    private IEnumerator GetGPS()
    {
        float time = Time_Out;
        while (Input.location.status == LocationServiceStatus.Initializing && time > 0)
        {
            yield return new WaitForSeconds(1);
            time--;
        }

        if (time < 1)
        {
            OnError("Timed out");
            yield break;
        }

        if (Input.location.status == LocationServiceStatus.Failed)
        {
            OnError("Unable to determine device location");
            yield break;
        }
        else
        {
            OnStartSuccess(Input.location.lastData);
        }
    }

    /// <summary>
    /// 停止定位
    /// </summary>
    public static void StopGPS()
    {
        if (!_Instance)
        {
            return;
        }
        if (!_Instance._IsStarted)
        {
            return;
        }
        try
        {
            Input.location.Stop();
            _Instance._IsStarted = false;
        }
        catch (System.Exception)
        {
            throw;
        }
        finally
        {
            _Instance.OnStopped();
        }
    }

    /// <summary>
    /// 啟動(dòng)成功
    /// </summary>
    /// <param name="locationInfo"></param>
    private void OnStartSuccess(LocationInfo locationInfo)
    {
        Debug.Log("OnStartSuccess:" + locationInfo.latitude + " " + locationInfo.longitude + " " + locationInfo.altitude + " " + locationInfo.horizontalAccuracy + " " + locationInfo.timestamp);
        SuccessCallback?.Invoke(locationInfo);
    }

    /// <summary>
    /// 發(fā)生錯(cuò)誤
    /// </summary>
    private void OnError(string errorInfo)
    {
        Debug.Log("OnError:" + errorInfo);
        FailureCallback?.Invoke(errorInfo);
        StopGPS();
    }

    /// <summary>
    /// 更新位置
    /// </summary>
    /// <param name="locationInfo"></param>
    private void OnUpdate(LocationInfo locationInfo)
    {
        UpdateCallback?.Invoke(locationInfo);
    }

    /// <summary>
    /// 停止
    /// </summary>
    private void OnStopped()
    {
        Debug.Log("OnStopped:");
        StoppedCallback?.Invoke();

        if (gameObject)
        {
            Destroy(gameObject);
            _Instance = null;
        }
    }
}

根據(jù)GPS信息獲取對(duì)應(yīng)的國(guó)家城市

基本上所有的地圖都有這個(gè)功能,例如百度地圖,谷歌地圖等。

百度地圖:逆地理編碼 rgc 反geo檢索 | 百度地圖API SDK (baidu.com)

谷歌地圖:反向地理編碼(地址查詢(xún))請(qǐng)求和響應(yīng) | Geocoding API | Google Developers

簡(jiǎn)答來(lái)說(shuō)就是都是通過(guò)網(wǎng)絡(luò)請(qǐng)求,將GPS信息和自己創(chuàng)建的密鑰發(fā)送給后臺(tái),后臺(tái)返回對(duì)應(yīng)的國(guó)家城市信息,按照指定的格式進(jìn)行解析就可以了,這里就不過(guò)多介紹了。

但是想用起來(lái)都不簡(jiǎn)單,畢竟人家統(tǒng)計(jì)這么多地圖信息也不容易。

尾語(yǔ)

如果有寫(xiě)的不好的地方,歡迎各位大佬批評(píng)指正。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-531841.html

到了這里,關(guān)于Unity 獲取手機(jī)地理位置信息的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀(guān)點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • (Java版)根據(jù)ip獲取地理位置以及相關(guān)信息

    (Java版)根據(jù)ip獲取地理位置以及相關(guān)信息

    1.首先我們需要進(jìn)入地圖開(kāi)放平臺(tái)的官網(wǎng),根據(jù)提示注冊(cè)賬號(hào),以百度地圖為例: https://lbsyun.baidu.com/ 我們新用戶(hù)登錄之后會(huì)彈出這個(gè)頁(yè)面,選擇個(gè)人愛(ài)好者進(jìn)入完成注冊(cè) 成功之后我們會(huì)進(jìn)入到下面這個(gè)頁(yè)面,如果沒(méi)有申請(qǐng)ak的小伙伴在控制臺(tái)看板這一塊是有一個(gè)流程指引的

    2024年02月08日
    瀏覽(21)
  • uni-app獲取手機(jī)號(hào)-獲取用戶(hù)地理位置-根據(jù)位置獲取經(jīng)緯度跳轉(zhuǎn)高德

    uni-app獲取手機(jī)號(hào)-獲取用戶(hù)地理位置-根據(jù)位置獲取經(jīng)緯度跳轉(zhuǎn)高德

    1.獲取手機(jī)號(hào)首先要先登錄拿到code,用code去獲取session_key 2.獲取?code需要知道自己的AppID(小程序ID)和AppSecret(小程序密鑰) 3.解密后得到手機(jī)號(hào) ?登錄微信公眾平臺(tái)拿到自己的AppID(小程序ID)和AppSecret(小程序密鑰) ?微信公眾平臺(tái) ?補(bǔ)充獲取?code: 補(bǔ)充 獲取openId: 獲取session_key:

    2024年02月03日
    瀏覽(23)
  • 微信小程序通過(guò)startLocationUpdate,onLocationChange獲取當(dāng)前地理位置信息,配合騰訊地圖解析獲取到地址

    先創(chuàng)建個(gè)getLocation.js文件 在App.vue文件里引入封裝的getLocation.js文件 要在manifest.json文件里配置下內(nèi)容

    2024年02月03日
    瀏覽(88)
  • R語(yǔ)言【paleobioDB】——pbdb_collections_geo():從PBDB獲取根據(jù)地理位置信息篩選的采集號(hào)的基本信息

    Package? paleobioDB ?version 0.7.0 paleobioDB 包在2020年已經(jīng)停止更新,該包依賴(lài)PBDB v1 API。 可以選擇在Index of /src/contrib/Archive/paleobioDB (r-project.org)下載安裝包后,執(zhí)行本地安裝。 參數(shù)【...】 :可通過(guò) API 調(diào)用的參數(shù)。所有可用參數(shù)詳見(jiàn)?PBDB Data Service: Single fossil collection。 根據(jù)參數(shù)發(fā)

    2024年01月22日
    瀏覽(20)
  • 使用uniapp開(kāi)發(fā)獲取地理位置

    使用uniapp開(kāi)發(fā)獲取地理位置

    老板要求做一個(gè)微信小程序,后面又希望能轉(zhuǎn)為app. 所以選擇了uniapp開(kāi)發(fā). 我的體驗(yàn)和感想就是以后不用uniapp了. 資源不多,學(xué)習(xí)了可能用處也不大.適合外包的干.這里寫(xiě)一下使用uniapp開(kāi)發(fā)微信小程序獲取地理位置 基本邏輯是使用uniapp的api首先獲得地理經(jīng)緯度位置等信息(在這之前

    2024年02月07日
    瀏覽(27)
  • Redis GEO地理位置信息的應(yīng)用

    Redis GEO地理位置信息的應(yīng)用

    Redis的GEO操作是一種基于地理位置信息進(jìn)行操作的功能。它使用經(jīng)度和緯度坐標(biāo)來(lái)表示地理位置,支持存儲(chǔ)地理位置信息用來(lái)實(shí)現(xiàn)諸如附近位置、搖一搖這類(lèi)依賴(lài)于地理位置信息的功能。 1.GEOADD添加位置信息 將一個(gè)或多個(gè)指定的地理位置(經(jīng)度、緯度、名稱(chēng))添加到指定的鍵

    2024年02月08日
    瀏覽(20)
  • 微信小程序 通過(guò)獲取地理位置查看天氣

    微信小程序 通過(guò)獲取地理位置查看天氣

    ? 1.在app.json中寫(xiě)入 2.申請(qǐng)和風(fēng)天氣APIKEY?和風(fēng)天氣開(kāi)發(fā)平臺(tái) ~ 高效強(qiáng)大的天氣API,天氣SDK和天氣插件 3.在js文件中設(shè)置變量 4.獲取天氣代碼? 5.根據(jù)坐標(biāo)獲取城市? 6.獲取天氣情況? ?結(jié)束啦。

    2024年02月09日
    瀏覽(92)
  • uniapp開(kāi)發(fā)小程序如何獲取用戶(hù)地理位置

    uniapp開(kāi)發(fā)小程序如何獲取用戶(hù)地理位置

    1、需求說(shuō)明 需求:點(diǎn)擊按鈕獲取當(dāng)前微信位置,以及點(diǎn)擊拒絕授權(quán)后,下次點(diǎn)擊還可以拉起授權(quán)窗口; 2、言歸正傳 1、編寫(xiě)代碼 模板部分 script部分 2、在 manifest.json 新增如下配置 原因:因?yàn)槲⑿判〕绦驈?019年1月14日起新提交發(fā)布的版本若未填寫(xiě)地理位置用途說(shuō)明,則將無(wú)

    2024年04月14日
    瀏覽(19)
  • uniapp獲取地理位置的API是什么?

    UniApp獲取地理位置的API是 uni.getLocation 。它的作用是獲取用戶(hù)的當(dāng)前地理位置信息,包括經(jīng)緯度、速度、高度等。通過(guò)該API,開(kāi)發(fā)者能夠?qū)崿F(xiàn)基于地理位置的功能,如顯示用戶(hù)所在位置附近的商家、導(dǎo)航服務(wù)、天氣查詢(xún)等。 以下是一個(gè)示例,展示如何使用uni.getLocation來(lái)獲取用

    2024年02月07日
    瀏覽(30)
  • 微信小程序定位開(kāi)發(fā) 逆地理位置查詢(xún) 經(jīng)緯度獲取位置名稱(chēng)

    一. 微信小程序獲取用戶(hù)定位==經(jīng)緯度(官方) (1)官方方法:wx.getLocation(Object object) (2)官方鏈接:https://developers.weixin.qq.com/miniprogram/dev/api/location/wx.getLocation.html (3)關(guān)鍵點(diǎn): 申請(qǐng)權(quán)限 :在小程序管理后臺(tái),「開(kāi)發(fā)」-「開(kāi)發(fā)管理」-「接口設(shè)置」中申請(qǐng)開(kāi)通該接口權(quán)限。

    2024年02月16日
    瀏覽(18)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包