UE4 DownloadImage を試してみる
概要
UnrealEngine の DownloadImage についての試してみたメモ書きです。
環境
Windows10
Visual Studio 2017
UnrealEngine 4.25
参考
以下を参考にさせて頂きました、ありがとうございます。
UE4 画像ファイルをURL指定でダウンロードする
UE4 「Download Image」を使ってみる
Download Imageでリアルタイムにテクスチャを更新
UnrealEngine : UAsyncTaskDownloadImage::DownloadImage
関連ソース
Engine/Source/Runtime/UMG/Public/Blueprint/AsyncTaskDownloadImage.h
DownloadImageとは
ゲーム外にある画像アセットを取得して表示させるためのノードです。
URL指定(http://~)やファイル指定(file:///~)で画像ファイルを取得し、テクスチャ(Texture2DDynamic型
)として返します。
ダウンロードした画像を表示する
EditorUtilityWidgetを使ってダウンロードしてきた画像を表示してみます。
準備
デザイナウィンドウにて、イメージパレットを置きます、サイズ等を適当に調整します。
イメージの詳細から [Brush] -> [バインド] -> [バインディングを作成]を選択し、関数を作ります。
DownloadImage
は変数として用意し、型は Texture2DDynamic
です。
Slate Brush を作成
ノードにつないでリターンします。またこの関数は 純粋
チェックを外してノードにつなげられるようにします。
イベントグラフウィンドウを開き、コンストラクタにて DownloadImage
を使い画像があるURLを指定します。ダウンロードしたテクスチャを DownloadTexture
に設定し、先ほど作成した関数を呼び出します。
結果
再生を実行し、作成したEditorUtilityWidgetを右クリックしてRunすると指定したURLから画像がダウンロードされ貼られます。
サンプルコードは画像サイズ決め打ちですが、ダウンロードして取得した画像サイズに合わせてあげれば綺麗に出力することもできるかと思います。
備考1:C++でのDownloadImageの呼び出し例
C++で呼び出す場合は以下の様になります。
以下サンプルコード。
#include "Blueprint/AsyncTaskDownloadImage.h"
auto _TaskDownloadImage = UAsyncTaskDownloadImage::DownloadImage(TEXT("https://4.bp.blogspot.com/-u2PJcGUSIN0/W-VEcnRvyII/AAAAAAABQFk/7miGx-JsspIuKCrD7UcZ5ymEOQmDn7yywCLcBGAs/s800/drink_petbottle_coffee.png"));
if(_TaskDownloadImage){
// 成功時に呼び出す処理を追加
_TaskDownloadImage->OnSuccess.AddDynamic(this, &ATestActor::SetDownloadTexture);
// 失敗時に呼び出す処理を追加
//_TaskDownloadImage->OnFail.AddDynamic(this, &ATestActor::FailDownloadFunc);
}
// 画像ダウンロード成功時に呼び出される処理
void ATestActor::SetDownloadTexture(UTexture2DDynamic* _Tex)
{
// ダウンロードしてきたテクスチャの処理
}
必要ならダウンロード失敗時の処理を OnFail
に処理を追加することができます。
取得失敗時のデフォルト画像を仕込むとよいかと思います。
備考2:対応画像フォーマットについて
ソースを確認すると対応している画像フォーマットは PNG
JPEG
BMP
のようです。
void UAsyncTaskDownloadImage::HandleImageRequest(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded)
{
#if !UE_SERVER
RemoveFromRoot();
if ( bSucceeded && HttpResponse.IsValid() && HttpResponse->GetContentLength() > 0 )
{
IImageWrapperModule& ImageWrapperModule = FModuleManager::LoadModuleChecked<IImageWrapperModule>(FName("ImageWrapper"));
TSharedPtr<IImageWrapper> ImageWrappers[3] =
{
ImageWrapperModule.CreateImageWrapper(EImageFormat::PNG),
ImageWrapperModule.CreateImageWrapper(EImageFormat::JPEG),
ImageWrapperModule.CreateImageWrapper(EImageFormat::BMP),
};
// ...省略...
まとめ
URL指定ができるため外部アカウントのアイコン画像などを取得表示するのが主な使い方かと思います。PhotoShopでの修正テクスチャをリアルタイムで反映させるようなテクニカルな使い方もあるようですが。。
Author And Source
この問題について(UE4 DownloadImage を試してみる), 我々は、より多くの情報をここで見つけました https://qiita.com/unknown_ds/items/77068451361fbd8acf5a著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .