Unity接高德地图以及天气API

👉前言

有时候会用到天气的系统,本篇使用高德API开发,方便使用,简单记录一下,不喜勿喷哦,
大家好,我是心疼你的一切,不定时更新Unity开发技巧,觉得有用记得一键三连哦。
有问题 欢迎点赞评论哦.
下面就让我们进入正文吧 !

👉一. unity用高德获取天气

👉1.0 注册开发者账号

👉1.1 第一步先去高德地图开发者平台地址:https://lbs.amap.com/

👉1.2 登陆之后,创建应用

在这里插入图片描述

👉1.3然后创建应用

在这里插入图片描述

👉1.4 选择web服务之后就有了

在这里插入图片描述

👉1.5 key就是申请的密钥之后代码会用的到

👉1.6 下面是获取天气代码

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;

public class GetWeather : MonoBehaviour
{
    /// <summary>
    /// 密钥 于高德开发者平台创建应用申请获得
    /// </summary>
    private const string key = "key";
    

    private void Start()
    {
        Get("320100", GetDataType.Lives, data => { });
    }
 
    public enum GetDataType
    {
        /// <summary>
        /// 获取实况天气
        /// </summary>
        Lives,
        /// <summary>
        /// 获取预报天气
        /// </summary>
        Forecast
    }
    /// <summary>
    /// 获取天气数据
    /// </summary>
    /// <param name="city">城市编码</param>
    /// <param name="callback">回调函数</param>
    public void Get(string city, GetDataType type, Action<string> callback)
    {
        StartCoroutine(SendWebRequest(city, type, callback));
    }
    private IEnumerator SendWebRequest(string city, GetDataType type, Action<string> callback)
    {
        //url拼接
        string url = string.Format("https://restapi.amap.com/v3/weather/weatherInfo?key={0}&city={1}&extensions={2}", key, city, type == GetDataType.Lives ? "base" : "all");
        //GET方式调用API服务
        using (UnityWebRequest request = UnityWebRequest.Get(url))
        {
            DateTime beginTime = DateTime.Now;
            yield return request.SendWebRequest();
            DateTime endTime = DateTime.Now;
            if (request.result == UnityWebRequest.Result.Success)
            {
                Debug.Log($"{beginTime} 发起网络请求 于 {endTime} 收到响应:\r\n{request.downloadHandler.text}");
                callback.Invoke(request.downloadHandler.text);
            }
            else
            {
                Debug.Log($"发起网络请求失败:{request.error}");
            }
        }
    }
}

👉1.7 脚本随便挂一个地方运行测试即可

在这里插入图片描述

👉二. unity用高德获取当前位置

👉2.1 当前位置打印如下图

在这里插入图片描述

👉2.2 里面有经纬度,省份,城市编码…

👉2.3 获取当前位置的代码如下

using LitJson;
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;

public class GetUrl : MonoBehaviour
{
    public static string mykey = "你自己的key";
    private string urldingwei= "https://restapi.amap.com/v3/ip?key=7fc469b5bf1646dbee4ff55c7b07f35e";
    private string urlJingTaiDiTu = "https://restapi.amap.com/v3/staticmap?zoom=15&size=500*500&paths=10,0x0000ff,1,,:116.31604,39.96491;116.320816,39.966606;116.321785,39.966827;116.32361,39.966957&key=你自己的key";
    // Start is called before the first frame update
    void Start()
    {
        StartCoroutine(PostRequest_GET(urldingwei,data=> { }));
    }

    IEnumerator PostRequest_GET(string urll, Action<string> callback)
    {
        using (UnityWebRequest webRequest = UnityWebRequest.Get(urll))
        {
            // 发送请求
            yield return webRequest.SendWebRequest();

            // 检查是否有错误
            if (webRequest.result != UnityWebRequest.Result.Success)
            {
                Debug.LogError("Error: " + webRequest.error);
                Debug.Log(webRequest.responseCode);

            }
            else
            {
                // 请求成功,处理响应数据
                Debug.Log(webRequest.responseCode);
                Debug.Log("Response: " + webRequest.downloadHandler.text);
                //postDatas = webRequest.downloadHandler.text;
                callback.Invoke(webRequest.downloadHandler.text);
                Root root = JsonMapper.ToObject<Root>(webRequest.downloadHandler.text);
                //GetJsonData_HuiYiShi(root.data);
            }
        }
    }

    private WWW Loadab;
    public IEnumerator LoadWWW(string path)
    {
        Loadab = new WWW(path);  //GloData.ABAdress=Application.streamingAssetsPath; 路径可以根据自己需求来修改
        yield return Loadab;
        if (Loadab.error != null)
        {
            Debug.Log(Loadab.error);
        }
        else
        {
            string oko = Loadab.text;
            Debug.Log(oko);
        }
    }

}
public enum output
{
    JSON,XML
}
public class Root
{
    /// <summary>
    /// 
    /// </summary>
    public string status { get; set; }
    /// <summary>
    /// 
    /// </summary>
    public string info { get; set; }
    /// <summary>
    /// 
    /// </summary>
    public string infocode { get; set; }
    /// <summary>
    /// 江苏省
    /// </summary>
    public string province { get; set; }
    /// <summary>
    /// 南京市
    /// </summary>
    public string city { get; set; }
    /// <summary>
    /// 
    /// </summary>
    public string adcode { get; set; }
    /// <summary>
    /// 
    /// </summary>
    public string rectangle { get; set; }
}



以上就是用高德API获取天气和地理位置的用法,

本次就这么多了,感谢观看!!!
补充:

👉原理

高德地图SDK与Unity引擎深度集成,提供以下核心功能:

  1. 海量地理数据:包括3D建筑模型、道路、水系等真实世界数据,支持开发者快速构建游戏场景。

  2. 高效渲染:通过Unity插件自动处理地图渲染,开发者无需深入理解地图底层逻辑,可直接调用API实现场景生成。

  3. LBS功能:支持基于真实地理位置的游戏玩法(如《阴阳师》的结界系统),通过SDK实现位置追踪和地图元素动态加载。

  4. 实现步骤
    注册开发者账号:在高德开放平台创建应用,获取API密钥(Key)。
    导入SDK:将高德提供的Unity插件集成到项目中,配置密钥和权限。
    地图场景构建:
    使用AMapUnitySDK加载地图数据,生成3D模型和地形。
    通过代码动态调整地图风格(如科幻、二次元)。
    LBS功能开发:调用定位接口获取玩家实时位置,实现位置相关游戏逻辑。

👉注意事项

密钥安全:避免硬编码密钥,可拆分存储或动态获取,防止反编译泄露。

模型优化:高精度3D模型可能导致性能问题,需使用LOD(多细节层次)技术优化渲染。

网络请求:确保异步加载地图数据,避免主线程阻塞,使用协程或UnityWebRequest处理。

平台兼容性:iOS需注意ARKit权限配置,Android需检查GPS和网络权限。

👉综合注意事项

API调用频率:高德接口有调用次数限制,需根据业务需求购买合适套餐。

数据安全:用户地理位置等敏感信息需加密传输,符合GDPR等隐私法规。

多线程处理:避免在UI线程直接处理网络请求,使用async/await或协程优化性能。

跨平台调试:在Unity Editor中模拟不同平台(如Android/iOS)的行为,确保功能一致性。

👉壁纸分享

请添加图片描述
请添加图片描述

👉总结

本次总结的就是高德API使用,有需要会继续添加新的
如能帮助到你,就帮忙点个赞吧,三连更好哦,谢谢
你的点赞就是对博主的支持,有问题记得留言评论哦!
不定时更新Unity开发技巧,觉得有用记得一键三连哦。么么哒

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

心疼你的一切

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值