在日常的UE4使用场景中,可能会存在这样的需求:输入一个url的地址,来改变当前游戏的某项内容,如音乐、背景等等
在这过程中就会涉及到内容的下载,UE4自带的蓝图中已经存在了一些自带的下载工具,但是只是针对特定格式类型的文件,所以就需要一个通用的文件下载功能来应对不同的文件
由于要将数据传输到蓝图,所以功能函数一般写在ALevelScriptActor中,具体代码如下:
.h文件中:
UFUNCTION(BlueprintCallable, Category = "NormalFunctionLibrary|Download")
static class USoundWave* GetContentFromUrl(FString URL, FString SaveSource, FString SaveName);
.cpp文件中:
USoundWave * ALevelScriptActor::GetContentFromUrl(FString URL, FString SaveSource, FString SaveName)
{
std::string url = TCHAR_TO_UTF8(*URL);
size_t len = url.length();//获取字符串长度
int nmlen = MultiByteToWideChar(CP_ACP, 0, url.c_str(), len + 1, NULL, 0);//如果函数运行成功,并且cchWideChar为零,
//返回值是接收到待转换字符串的缓冲区所需求的宽字符数大小。
wchar_t* buffer = new wchar_t[nmlen];
MultiByteToWideChar(CP_ACP, 0, url.c_str(), len + 1, buffer, nmlen);
//转换为ASNI
std::string str = TCHAR_TO_UTF8(*SaveSource);
str = str + TCHAR_TO_UTF8(*SaveName);
std::wstring widstr = std::wstring(str.begin(), str.end());
const wchar_t *pwidstr = widstr.c_str();
HRESULT hr = URLDownloadToFile(NULL, buffer, pwidstr, 0, NULL);
return nullptr;
}
然后在关卡的蓝图中使用该节点
其中,URL为要下载的文件的地址;save source为文件保存的地址(地址后要加“\”),save name为文件保存的名字,要加上后缀
然后运行游戏,文件就会被保存下来
以下是一些下载视频的地址,可供测试:
http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4
http://vjs.zencdn.net/v/oceans.mp4
https://media.w3.org/2010/05/sintel/trailer.mp4
http://mirror.aarnet.edu.au/pub/TED-talks/911Mothers_2010W-480p.mp4
视频下载网站:
https://www.sample-videos.com/index.php#sample-mp4-video
参考了2篇文章
https://blog.youkuaiyun.com/o0pk2008/article/details/105246841
https://blog.youkuaiyun.com/weixin_41010198/article/details/88055078