4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【UE5】TOptionalがUHTでサポートされた

Last updated at Posted at 2024-12-16

Unreal Engine5.4からTOptionalがUnrealHeaderToolでサポートされました!!
ただ、UnrealHeaderToolでサポートされただけで、Blueprint側で任意に型をOptionalに設定する事が現状できないので注意してください!!

公式ドキュメント

ReleaseNote Unreal Engine5.4

UHT に TOptional 型のサポートを追加しました。

使って見た例

インクルードに必要なヘッダーファイル
#include "Misc/Optional.h"
変数定義部分
	UPROPERTY(EditAnywhere, Category = "Test")
	TOptional<int32> Value;

C++側でメンバー変数でTOptional型がサポートされました。
上記のような表記をする事でToptionalを使って詳細タブで設定を行う事ができます。

値が未設定の場合

image.png

値が設定済みの場合

image.png

現状はBlueprint側に専用ノードは容易されていなさそうです。
今後に期待しましょう!

リフレクションで使うには!

ヘッダーファイル

UCLASS(Blueprintable)
class AMyActor : public AActor
{
	GENERATED_BODY()

public:

	virtual void BeginPlay() override;

public:
	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Test")
	TOptional<FString> OptionalValue;
};

Engine\Source\Runtime\CoreUObject\Public\UObject\PropertyOptional.h

Optionalにアクセスした例
if (OptionalValue.IsSet())
{
	const FString& ValueRef = OptionalValue.GetValue();
	UE_LOG(LogTemp, Log, TEXT("%s"), *ValueRef);
}
OptionalValue.Reset();
リフレクションを使ってアクセスした例
auto* OptionalProperty = FindFProperty<FOptionalProperty>(GetClass(), TEXT("OptionalValue"));
void* OptionalData = OptionalProperty->ContainerPtrToValuePtr<void>(this);

if (OptionalProperty->IsSet(OptionalData))
{
	FStrProperty* ValueProp = CastField<FStrProperty>(OptionalProperty->GetValueProperty());
	const FString* ValuePtr = ValueProp->ContainerPtrToValuePtr<FString>(OptionalData);

	if (ValuePtr)
	{
		const FString& ValueRef = *ValuePtr;
		UE_LOG(LogTemp, Log, TEXT("%s"), *ValueRef);
	}
}

OptionalProperty->MarkUnset(Data);
4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?