总结:在UE4 中通过Http请求访问和风天气API链接拿到天气数据
2021/11/02更新:
如果想更简便的实时获取天气相关信息可以结合商城免费插件Varest使用
具体方法可以去看这个博主的文章,有详细流程:
UE4 实时获取天气信息
更新:
此处代码是用的4.25版本写的,如果你是使用的4.26版本,需要将
TSharedRef<IHttpRequest> Request = FHttpModule::Get().CreateRequest();
改为
TSharedRef<IHttpRequest, ESPMode::ThreadSafe> Request = FHttpModule::Get().CreateRequest();
步骤:
1.注册和风天气账号(自己去看官方介绍,官方有详细的API文档,有免费个人版使用,链接我放到最后面了)
这是拿到的相关数据,下面创建的结构体和后面数据筛选都是在这个基础上来的,马赛克部分是需要你自己去注册之后创建相关应用的Key,填上就可以查询了,后面的代码也用星号代替了(到时候将你的Key替换那段星号即可)。
2.创建UE4项目,创建代码(我这里将功能写在蓝图函数库中的)
3.在Bulid.cs添加HTTP API和Json相关的引用
PublicDependencyModuleNames.AddRange(new string[] {“HTTP”,“Json”, “JsonUtilities”});
4.加头文件"Http.h",“Json.h” (如果只是单纯的在项目中使用,好像不加也能编译过去,但是如果需要将该功能做成插件打包的话就必须得加,不然会打包失败)
5.创建需要信息的结构体(方便拿来存放等会需要在蓝图中使用的数据,要什么就往里面加什么)
6.创建HTTP请求
7.在.cpp中初始化上面创建的结构体
FWeatherInfo WeatherData;
8.在.cpp中写入功能
GetWeatherInfo:
FString ApiUrl = " ";
/* 将中文(城市名)进行百分比编码 */
FString CityUrl = FGenericPlatformHttp::UrlEncode(City);
/* 和风天气API链接 */
ApiUrl = "https://free-api.heweather.net/s6/weather?location=" + CityUrl + "&key=*****************";
TSharedRef<IHttpRequest> Request = FHttpModule::Get().CreateRequest();
Request->OnProcessRequestComplete().BindStatic(UGetRealTimeWeatherInfo::OnResponseReceived);
//This is the url on which to process the request
Request->SetURL(ApiUrl);
Request->SetVerb("GET");
Request->SetHeader("Content-Type", TEXT("application/json;charset=UTF-8"