前言
由 Epic Games 推出的虚幻系列引擎,因其高效、全能、易获取、所见即所得等特性受到广大游戏开发者的欢迎,市面上也不乏从入门到深度分析的教程。本系列主要面向虚幻引擎的初学者以及有一定实践经验的虚幻引擎游戏开发者,分享能够立即运用在自己项目中的实践技巧。本教程综合了个人的学习笔记、官方文档以及个人心得,水平不足之处,望读者反馈和指正。
本文是 UE 应用实例分享系列专栏的第三篇。
使用 HTTP 协议同步游戏状态
网络游戏一般会使用两类服务器:存储角色、玩家数据的服务器和同步玩家移动、计算逻辑的服务器。前者经常使用 HTTP 协议来部署,在术语上我们称之为状态同步服务器。一些没有强联网需求的游戏也会利用 HTTP 协议的服务器来提供一些基于线上数据存储的功能(例如排行榜,官方公告的热推送)。在这些场景中,如果客户端有访问网络的需求,必然会涉及到 HTTP 的使用。这篇小贴士将总结如何在虚幻引擎中发送 HTTP 请求。
准备工作
首先需要引用 HTTP 模块到游戏中,然后包含头文件 Http.h
。
虚幻引擎采用了自己的编译系统,即 UBT(UnrealBuildTool),虚幻编译工具(UBT)替代了 MSBuild 等工具,作为虚幻引擎项目的专用工具。UBT 通过模块方式来引用其他代码,所以我们需要找到 [Name].Build.cs
文件,添加 HTTP 模块。
PublicDependencyModuleNames.AddRange(new string[]{"Core", "CoreUObject", "Engine", "HTTP"});
发送请求
主要流程有三步:
- 创建 HttpRequest 对象
- 配置 HttpRequest 对象
- 设置地址
- 设置请求方法(GET/POST)
- 绑定回调
- 设置请求头
- 发送 HttpRequest 对象
示例:
TSharedRef HttpReuest = FHttpModule::Get().CreateRequest(); HttpReuest->SetURL(URL); // 设置访问的地址 HttpReuest->SetVerb(TEXT("GET")); // 选择 GET 还是 POST 方式请求 HttpReuest->SetHeader(TEXT("Content-Type"), TEXT("application/json")); // 设置 Header HttpReuest->SetContentAsString(PostString) // 如果是 POST 上传 Json 就用这个 HttpReuest->OnProcessRequestComplete().BindRaw(this, &FHttpRequestTest::OnRequestComplete); // 绑定请求完成时候的回调函数 HttpReuest->OnRequestProgress().BindRaw(this, &FHttpRequestTest::OnRequestProgress); // 下载东西时检查进度用的 HttpReuest->ProcessRequest(); // 发送这个请求
处理请求
Http 回调函数会在 Http 请求完成后被调用,可以在这里接收和处理服务器返回的内容。
函数声明
void Namespace::OnRequestComplete(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded)
绑定回调
HttpRequest->OnProcessRequestComplete().BindUObject(this, &Namespace::OnRequestComplete);
通过这这两个接口可以取出服务器返回的数据。
HttpResponse->GetContentAsString();
以字符串方式获取返回的内容HttpResponse->GetResponseCode();
获取返回码
封面:UE 启动页面
*本文内容系作者独立观点,不代表 indienova 立场。未经授权允许,请勿转载。
暂无关于此文章的评论。