FC2ブログ

ゾンビ/Unity/あと何か

ゾンビや気になったオカルトネタ、Unityでのゲーム制作についてつづるブログです。

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

【UE4】SEditableLabel


class MyEditableLabel : public SCompoundWidget {
public:
  SLATE_BEGIN_ARGS(MyEditableLabel) { }
    SLATE_ATTRIBUTE(FText, Text)
  SLATE_END_ARGS()
  void Construct(const FArguments &args) {
    ChildSlot
    [
      SNew(SEditableLabel)
      .OnTextChanged(this, &MyEditableLabel::OnTextChanged)
      .Text(args._Text)
    ];
  }
  void OnTextChanged(const FText &t) {
    ChildSlot
    [
      SNew(SEditableLabel)
      .OnTextChanged(this, &MyEditableLabel::OnTextChanged)
      .Text(t)
    ];
  }
};
/*
  使い方
  SNew(MyEditableLabel).Text(FText::FromString("hogehoge"))
*/

Editable Label なんて誰も使わないと思うけど、こうしないとまともに動かない
SCompoundWidget 継承したクラス用意しなきゃまともに動作しないって、なんの冗談だ?

それにこれ

args._Text

SLATE_ATTRIBUTE で定義したメンバを呼び出す場合、先頭に _ (アンダーバー)を付けないといけない謎仕様

SLATE_ATTRIBUTE(FText, Text) こんな風に
Text って名前のメンバを宣言したら、呼び出すときは _Text って書かないといけない
UE4のソースコード見てやっと分かった

ChildSlot の存在が謎すぎる
なんで ChildSlot の []オペレータの中で SNew しなきゃいけないのか意図がサッパリ分からん
スポンサーサイト

- 0 Comments

Add your comment

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。