fc2ブログ

凛(kagring)のUE5/UE4とゲーム制作と雑記ブログ

2016 年から UE4 / 2021年から UE5 を触り始めました。勉強したもののメモ用ブログです。ゲーム制作に関するメモや雑記とか色々あります。C++ での Qt、Unity もほんの少しあります。

PREV | PAGE-SELECT | NEXT

≫ EDIT

UE4 エディタ拡張・エディタブルテキストボックス(テキストボックス)ウィジェット(SEditableTextBox)

エディタブルテキストボックスウィジェットについてのメモです。
他ではよく「テキストボックス」と呼んでいるコントロールですね。
UE4ではラベルのことをテキストブロックと呼び
中身を変更できるものを「エディタブルテキストボックス」としているみたいですね。

ロジカルビートさんのこのページとエンジンのソースとにらめっこしていました。
ロジカルビートさんはインプットボックスと呼んでいるようです。

【UE4】エディタ拡張(インプットボックス編)
http://logicalbeat.jp/blog/875/

エディタブルテキストボックスを使うには「SEditableTextBox」クラスを使います。

~省略
+SVerticalBox::Slot()
.AutoHeight()
[
SNew(SEditableTextBox)
.Text(LOCTEXT("EditText", "SEditableTextBox。初期テキストだドン"))
.HintText(LOCTEXT("HintText", "ヒントテキスト"))
.Font(FSlateFontInfo("Veranda", 16))
.Padding(FMargin(8, 8, 8, 8))
.ForegroundColor(FSlateColor(FLinearColor(1.0f, 0.0f, 1.0f, 1.0f)))
.BackgroundColor(FSlateColor(FLinearColor(1.0f, 1.0f, 0.0f, 1.0f)))
//.IsReadOnly(true)
//.ReadOnlyForegroundColor(FSlateColor(FLinearColor(0.0f, 1.0f, 1.0f, 1.0f)))
//.IsPassword(true)
.SelectAllTextWhenFocused(true)
.RevertTextOnEscape(true)
.ClearKeyboardFocusOnCommit(false)
.IsCaretMovedWhenGainFocus(true)
.OnTextCommitted_Raw(this, &FUtilityModule::OnEditableTextBoxCommited)
.OnTextChanged_Raw(this, &FUtilityModule::OnEditableTextBoxCommited, ETextCommit::Default)
]
~省略
void FUtilityModule::OnEditableTextBoxCommited(const FText& InText, ETextCommit::Type InCommitType) const
{
switch(InCommitType){
case ETextCommit::Default:
break;
case ETextCommit::OnEnter:
UE_LOG(LogTemp, Log, TEXT("エンター"))
break;
case ETextCommit::OnUserMovedFocus:
UE_LOG(LogTemp, Log, TEXT("フォーカス移動"))
break;
case ETextCommit::OnCleared:
UE_LOG(LogTemp, Log, TEXT("クリア"))
break;
}
}


雑ですがこんな感じの記述になります。
結果はこんな感じに。
SEditableTextBox000.png

SEditableTextBox の各プロパティの機能はこんな感じになります。

・Text
エディタブルテキストボックスに最初に表示される文字列です。FText 型で指定します。
・HintText
エディタブルテキストボックスに何も文字列がない時に表示される文字列です。FText 型で指定します。
SEditableTextBox001.png
・Font
表示する文字列のフォントです。
FSlateFontInfo 型を使って、フォント名とフォントサイズを指定します。
・Padding
文字列を表示するときのマージン(スペース領域)を指定します。
FMargin 型で上下左右を指定します。
・ForegroundColor
表示する文字列の色です。
FSlateColor 型で指定します。
・BackgroundColor
文字列を表示するための背景の色です。
FSlateColor 型で指定します。
・IsReadOnly
読み取り専用にします。
SEditableTextBox003.png
・ReadOnlyForegroundColor
読み取り専用の時の文字の色を指定します。
と思ったのですが特に変わらず…。
・IsPassword
文字列をそのまま表示せず記号で表示します。
SEditableTextBox002.png
・SelectAllTextWhenFocused
エディタブルテキストボックスにフォーカスが移った時に
文字列を全選択状態にします。
・RevertTextOnEscape
編集中にエスケープキーを押した場合に編集前の状態に戻します。
・ClearKeyboardFocusOnCommit
デフォルトではエンターを押したときにETextCommit::OnClearedメッセージが投げられるようなのですが
false にすることで ETextCommit::OnCleared は投げられなくなります。
(ETextCommit::OnEnter のみの通知になる)
・IsCaretMovedWhenGainFocus
良くわからなかったので公式ドキュメント
・SEditableTextBox::FArguments::IsCaretMovedWhenGainFocus
https://docs.unrealengine.com/latest/INT/API/Runtime/Slate/Widgets/Input/SEditableTextBox/FArguments/IsCaretMovedWhen-/index.html
この内容を翻訳したところ

自動補完が終了したときにフォーカスを失うための回避策。

となりました。
デフォルトがtrueなのでそのままの方がよさそうです。
・OnTextCommitted
テキストが決定(キャンセル、フォーカス移動を含む)された時に通知される関数を登録します。
・OnTextChanged
テキストが変更された時に通知される関数を登録します。
OnTextCommitted と同じ関数を登録することできます。

通知の関数のコミットタイプは
・ETextCommit::Default
通常の通知。今回ではテキスト編集中に文字列を変更したタイミングごとに通知される。
・ETextCommit::OnEnter
エンターキーで決定したときに通知される。
・ETextCommit::OnUserMovedFocus
フォーカスが移動したときに通知される。
・ETextCommit::OnCleared
エスケープキーなどでクリアしたときに通知される。

といった感じでしょうか。
思ったより機能が盛りだくさんでしたが、入力系統の一つとして結構使うんじゃないでしょうか。

| UE4 | 15:46 | comments:0 | trackbacks:0 | TOP↑

COMMENT















非公開コメント

TRACKBACK URL

http://kagring.blog.fc2.com/tb.php/251-ca5c317e

TRACKBACK

PREV | PAGE-SELECT | NEXT