一、效果图

二、注册心知天气

心知天气 - 登录

注册完成申请免费版API

获取APIKey

文档地址:查看你的 API密钥 · 语雀 (yuque.com)

图片下载地址:天气现象代码说明 | 心知天气文档 (seniverse.com)

在unity新建Resources文件夹,将图片导入(因为代码会根据返回的图片名称在这个文件夹下查找图片,注意要把图片处理成精灵格式Sprite)

二、 代码实现

思路:

1.获取本地公网IP   http://icanhazip.com/

2.根据IP查询城市(心知天气提供接口,需要申请key)

https://api.seniverse.com/v3/location/search.json?key=私钥&q=城市

3.根据城市查询天气(心知天气提供接口,需要申请key)

https://api.seniverse.com/v3/weather/now.json?key=私钥&location={0}&language=zh-Hans&unit=c城市id

json插件可以使用LitJson.dll或者Newtonsoft.Json,这里我用的是Newtonsoft.Json

下载地址: 提取码 syq1

LitJson.dll https://pan.baidu.com/share/init?surl=evpFU9FnL3KeP29_nVQlTQ

Newtonsoft.Json  https://pan.baidu.com/s/1fiRwL2qcepzgxOUwcTs1fQ

using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System.Collections;
using UnityEngine;
using UnityEngine.Networking;
using UnityEngine.UI;
//using LitJson;/// <summary>
/// 城市天气
/// </summary>
public class CityWeather : MonoBehaviour
{public Image imgWeather;    //天气图片public Text textWeather;    //天气public Text textTemperature;//温度public Text textCity;       //城市void Start(){StartCoroutine(GetRuntimeWeather());}IEnumerator GetRuntimeWeather(){//1.获取本地公网IPUnityWebRequest wwwWebIp = UnityWebRequest.Get(@"http://icanhazip.com/");yield return wwwWebIp.SendWebRequest();if (wwwWebIp.isNetworkError || wwwWebIp.isHttpError){yield break;}//2.根据IP查询城市(心知天气提供接口,需要申请key)***这里别忘记修改string urlQueryCity = "https://api.seniverse.com/v3/location/search.json?key=私钥&q=" + wwwWebIp.downloadHandler.text;UnityWebRequest wwwQueryCity = UnityWebRequest.Get(urlQueryCity);yield return wwwQueryCity.SendWebRequest();if (wwwQueryCity.isNetworkError || wwwQueryCity.isHttpError){yield break;}JObject cityData = JsonConvert.DeserializeObject<JObject>(wwwQueryCity.downloadHandler.text);string cityId = cityData["results"][0]["id"].ToString();textCity.text = cityData["results"][0]["name"].ToString(); //城市//3.根据城市查询天气(心知天气提供接口,需要申请key)***这里别忘记修改string urlWeather = string.Format("https://api.seniverse.com/v3/weather/now.json?key=私钥&location={0}&language=zh-Hans&unit=c", cityId);UnityWebRequest wwwWeather = UnityWebRequest.Get(urlWeather);yield return wwwWeather.SendWebRequest();if (wwwWeather.isNetworkError || wwwWeather.isHttpError){Debug.Log(wwwWeather.error);}//4.解析天气try{JObject weatherData = JsonConvert.DeserializeObject<JObject>(wwwWeather.downloadHandler.text);string spriteName = string.Format("Weather/{0}@2x", weatherData["results"][0]["now"]["code"].ToString());//天气文字textWeather.text = weatherData["results"][0]["now"]["text"].ToString();//图片,可以在心知天气上下载imgWeather.sprite = Resources.Load<Sprite>(spriteName);//Debug.Log(spriteName);//温度textTemperature.text = string.Format("{0} °C", weatherData["results"][0]["now"]["temperature"].ToString());}catch (System.Exception ex){Debug.Log(ex.Message);}}
}/** 返回的Json天气格式* {"results": [{"location": {"id": "WX4FBXXFKE4F","name": "北京","country": "CN","path": "北京,北京,中国","timezone": "Asia/Shanghai","timezone_offset": "+08:00"},"now": {"text": "晴","code": "0","temperature": "-10"},"last_update": "2021-01-08T09:20:00+08:00"}]
}*/

三、问题解决

经过几个朋友的测试,如果在运行中 textWeather.text = weatherData["results"][0]["now"]["text"].ToString();这句话出现超出数组索引问题,大概率是第一步获取公网ip的原因,在网页中访问 http://icanhazip.com/这个地址,返回的是

(IPV6地址),而不是(IPV4地址)这种格式的地址的话,就会出错。

原因: 可能是你的路由器支持IPV6导致。

win+R 输入cmd 打开控制台应用窗口,输入ipconfig 查看,看看是否ipV6不存在(注意不是本地IPV6)

 不支持ipV6使用 http://icanhazip.com/这个地址是没问题的

解决办法:

更换获取公网ip

分享一些获取公网ip的url地址_IP大侠的博客-CSDN博客_外网url

Unity接入心知天气,获取当前城市天气状况相关推荐

  1. ajax获取当前城市天气情况

    ajax获取当前城市天气情况 最进项目用到了天气的功能,经过不懈的努力终于有了一点收获,特此发上来与大家共享 js脚本 <script type="text/javascript&qu ...

  2. ESP32学习之JSON,和接入心知天气

    注意:手机热点或者网络不能开5.0GHz频段和WIFI6,不然ESP32连不上 心知天气账号(免费版即可),网站:心知天气 - 高精度气象数据 - 天气数据API接口 - 行业气象解决方案 (seni ...

  3. 【爬虫实践】获取某城市天气数据

    功能需求 获取山东济南城市每天的天气情况. 需要获取四个数据:天气.温度.风向.风级. url地址:http://www.weather.com.cn/weather/101120101.shtml ...

  4. 微信小程序----map组件实现(获取定位城市天气或者指定城市天气数据)

    效果图 实现原理 采用高德地图微信小程序开发API(getWeather),如果 city 属性的值为空(或者没有city属性),默认返回定位位置的天气数据:如果 city 不为空,则返回 city ...

  5. Python-定时爬取指定城市天气(一)-发送给关心的微信好友

    一.背景 上班的日子总是3点一线,家里,公司和上班的路径,对于一个特别懒得我来说,经常遇到上班路上下雨了,而我却没带伞,多么痛的领悟.最近对python有一种狂热的学习热情,写了4年多的C++代码,对 ...

  6. Unity接入ChatGPT基于Python.Runtime的实现

    目录 前言 编译Python.Runtime.dll Unity接入ChatGPT 1.第一步 准备环境 2.第二步 python代码的书写 3.第三步 C#调用python代码 前言: 相信各位游戏 ...

  7. 使用 Fiddler 调试 心知天气,stm32 esp8266获取天气api

    心知天气 - 免费用户的功能: 国内 370 个主要城市 天气实况,包括天气现象文字.代码和气温 3 项数据 未来 3 天天气预报,包括白天天气现象文字及代码.晚间天气现象文字及代码.当天最高温度和最 ...

  8. Android中基于心知天气API获取天气信息

    Android中基于心知天气获取天气信息 JSON JSON简介 JSON对象 JSON数组 JSON解析 Android中获取天气 获取天气的流程 获取心知天气的API key 获取心知天气的API ...

  9. ESP8266使用AT指令获取时间和心知天气

    一.硬件:ESP8266,USB TO TTL模块,软件:串口调试助手 二.在心知官网注册账号:心知天气 - 高精度气象数据 - 天气数据API接口 - 行业气象解决方案 三.连接esp8266和us ...

  10. STM32使用CJSON获取心知天气

    文章目录 1.程序配置 2.新建json数据 3.读取json数据 4.解析心知天气 5.ESP01S获取数据 6.STM32获取数据 本文是接着上一篇文章的后续来写,上一篇写的太长了后面太累了就没写 ...

最新文章

  1. server 2003登录界面黑屏的解决办法
  2. 2020年AI将会如何发展?吴恩达、周志华、Yann LeCun等大神对2020年 AI 发展趋势的预测的预测...
  3. KVM — 内存虚拟化
  4. 【转】闲聊Kernel engineer的境界(全)
  5. Netty工作笔记0009---Channel基本介绍
  6. JDBC插入百万数据,不到5秒!
  7. C#中IPAddress与域名的使用
  8. 矢量绘图工具 Ipe
  9. 2018.8.14 李开复重返 TED 演讲稿双语版
  10. 中天科技(600522)
  11. 瓴羊CEO朋新宇:从数据发现问题到数据创造价值|2022全球数字价值峰会-阿里云开发者社区
  12. 单细胞分析:归一化和回归(八)
  13. 单点登录SSO(Single Sign On)
  14. 建立自己的iOS开发体系
  15. 我的计算机-软件开发之路(1)
  16. 机器人 郑佳佳_浙大毕业生娶了亲手造的机器人当老婆婚礼都办了!
  17. 1081 Rational Sum (20 分) 分数加法 简单模拟
  18. Thinking In ASP
  19. 冰雪旅游热开启!IU酒店与您畅游山水之间
  20. Web Serial Debug-浏览器串口调试工具

热门文章

  1. 计算机网络学生主页链接,计算机网络中一组相关网页通过超链接连接,用于描述一组完整的信息,称为( )。A.网站B.主页C.服 - 扁豆云问答...
  2. 数据结构 C++ 多项式的表达以及乘法实现
  3. Android5.0 下拉通知栏快捷开关的添加(必看)
  4. Android 9 隐藏下拉状态栏中的快捷开关
  5. 少时诵诗书少时诵诗书sss
  6. TCGA/癌症基因组图谱数据库|肿瘤简写中英文对照
  7. 30线性空间04——子空间的直和、n个子空间的直和、直和分解、直和补
  8. python控制多个屏幕_使用Python控制屏幕
  9. 计算机应用基础——计算机硬件(二)
  10. ios 根据日期知道周几_iOS 计算指定日期是周几星期几