PaperSloth’s diary

主にゲーム開発関連についての記事を書きます。

UE4 文字列変換について

目次

環境

Unreal Engine 4.17.2
Visual Studio Community 2015

FStringとstd::stringの変換について

プラグイン開発を行っているとネイティブのC/C++で書かれたプラグインとのやり取りが発生することがあると思います。
その時にUE4側のstring(FString)とC/C++のstring(std::string)の変換が必要になることがあります。

よくド忘れするので、簡単に個人用メモとしてまとめます。

FString -> std::string

この変換にはTCHAR_TO_UTF8マクロを使います。

FString ustr = "UnrealString";
std::string cstr = TCHAR_TO_UTF8(*ustr);

std::string -> FString

この変換にはc_strを呼び出します。

std::string cstr = "CppString";
FString ustr = cstr.c_str();

TCHAR_TO_UTF8の他にも幾つかマクロが存在します。
それらの定義は下記に記述があります。
Engine/Source/Runtime/Core/Public/Containers/StringConv.h

今回紹介したものがUTF8_TO_TCHARでしたが、他にも

TCHAR_TO_ANSI(str);
ANSI_TO_TCHAR(str);
TCHAR_TO_UTF8(str);

などがあります。


Blueprintに値を公開したい場合はFStringでなければなりません。
そのため、下記のようなものはエラーとなります。

UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "String")
std::string FooName;

UFUNCTION(BlueprintCallable, Category = "String")
void ConvertString(const std::string str);

UFUNCTION(BlueprintCallable, Category = "String")
std::string ConvertString();

UPROPERTYもUFUNCTIONもFStringに変換しなければ使用することはできません。
ですが、std::stringが引数、戻り値として使用できないというわけではないため
Unreal C++側での呼び出しに限定される場合は問題ありません。