【UE4】在UE4的蓝图中实现文件的下载

在日常的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;
}

然后在关卡的蓝图中使用该节点
【UE4】在UE4的蓝图中实现文件的下载_第1张图片
其中,URL为要下载的文件的地址;save source为文件保存的地址(地址后要加“\”),save name为文件保存的名字,要加上后缀

然后运行游戏,文件就会被保存下来
【UE4】在UE4的蓝图中实现文件的下载_第2张图片

以下是一些下载视频的地址,可供测试:

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.csdn.net/o0pk2008/article/details/105246841
https://blog.csdn.net/weixin_41010198/article/details/88055078

你可能感兴趣的:(UE4)