UEFN Verse言語 メタバース

【UEFN】UIボタンの作り方(4ページ目)│Verse解説の続き

【UEFN】UIボタンの作り方(4ページ目)│Verse解説の続き
みなみ

Verse解説の続きを教えてほしいです!

りゅう

初心者向けにわかりやすく解説してほしいですね!

こんなお悩みを解決します。

 本記事の内容
 本記事の信頼性

この記事を書いている僕は、クリエイター兼ブロガーです。実際に現在進行形でUEFNを学んでいます。

今回は、UIボタンの作り方のVerse(4)について解説します。

なお、1,2,3を見ていない方は先に1,2,3から進めましょう。

>> UIボタンの作り方

>> UIボタンのVerse解説(2)

>> UIボタンのVerse解説(3)

【UEFN】UIボタンの作り方を画像付きで徹底解説【Verse言語】
【UEFN】UIボタンの作り方を画像付きで徹底解説【Verse言語】

続きを見る

【UEFN】UIボタンの作り方(2ページ目)│Verse解説の続き
【UEFN】UIボタンの作り方(2ページ目)│Verse解説の続き

続きを見る

【UEFN】UIボタンの作り方(3ページ目)│Verse解説の続き
【UEFN】UIボタンの作り方(3ページ目)│Verse解説の続き

続きを見る

※以下のコードの解説文は、プログラミング初心者の主が調べながら記述したものです。

コードの解釈に誤りがありましたら恐縮ですm(_ _)m

参考程度にどうぞ。

それでは、さっそくやっていきましょう。

あすか

UIボタンの作り方(4ページ目)│Verse解説の続き

HandleSelectedUIButton(Message : widget_message):void=の詳細

    HandleSelectedUIButton(Message : widget_message):void=
        if(PlayerUI := GetPlayerUI[Message.Player], MyUI := MaybeMyUIPerPlayer[Message.Player]?):
            Player := Message.Player
            ThisWidget := Message.Source
            StaleButtonUI := Player.FindButtonUI(ThisWidget)
            if(ThisButtonUI := StaleButtonUI?):
                if(ThisButtonUI.RemovesUIOnClick?):
                    DeleteUI(Message)
                ThisButtonUI.ActivateTrigger(Player)
            else:
                Print("~ERROR: No buttonui found!")

プレイヤーUIとボタンUIの違い

widget_message構造体の詳細

if (PlayerUI := Get~Message.Playerの詳細

PlayerUI := GetPlayerUI[Message.Player]の詳細

指定されたプレーヤー(Message.Player)の詳細

GetPlayerUI関数の詳細

GetPlayerUI関数とplayer_uiクラスの関係性

if (PlayerUI := GetPlayerUI[Message.Player])で[]が採用されている理由

(MyUI := MaybeMyUIPerPlayer[Message.Player]?):の詳細

MaybeMyUIPerPlayerの詳細

特別なUIとは

Player := Message.Playerの詳細

ThisWidget := Message.Sourceの詳細

widget_message構造体の詳細

if (PlayerUI := GetPlayerUI[Message.Player]), (MyUI := MaybeMyUIPerPlayer[Message.Player]?):の必要性

このデータ構造は、ウィジェットに関連するイベントが発生したときに、そのイベントに関する情報を格納するために使用されます。について

StaleButtonUI := Player.FindButtonUI(ThisWidget)の詳細:途中FindButtonUI関数に進む

ThisWidget := Message.SourceとStaleButtonUI := Player.FindButtonUI(ThisWidget)の関係性

PlayerとAgentの使い分けについて

if (ThisButtonUI := StaleButtonUI?):の詳細

if ThisButtonUI.RemovesUIOnClick?~の詳細│DeleteUIの定義(含)

DeleteUI(Message)の詳細

ThisButtonUI.ActivateTrigger(Player)~の詳細ActivateTriggerの定義(含)

ボタンのトリガーをアクティベートする理由

DeleteUI(Message : widget_message) : void=の詳細

    DeleteUI(Message : widget_message) : void=
        if(PlayerUI := GetPlayerUI[Message.Player], MyUI := MaybeMyUIPerPlayer[Message.Player]?):
            PlayerUI.RemoveWidget(MyUI)
            if(set MaybeMyUIPerPlayer[Message.Player] = false) {}

widget_message構造体の詳細

if (PlayerUI := GetPlayerUI[Message.Player]), (MyUI := MaybeMyUIPerPlayer[Message.Player]?):の詳細

GetPlayerUI関数の詳細

player_uiクラスの詳細

(MyUI := MaybeMyUIPerPlayer[Message.Player]?):の詳細

PlayerUIとMyUIの違い

if(PlayerUI := ~r[Message.Player]?):の記述理由

PlayerUI.RemoveWidget(MyUI)の詳細

RemoveWidget関数の詳細

PlayerUIからMyUIを削除する理由

if(set MaybeMyUIPerPlayer[Message.Player] = false) {}の詳細

FindButtonUI&ActivateTrigger&LoadButtonStateの定義

    (Agent : agent).FindButtonUI(ThisWidget : widget):?buttonui=
        for(ThisButtonUI : ButtonUI):
            if(StaleWidget := ThisButtonUI.ButtonWidgetPerPlayer[Agent]):
                if(ThisWidget = StaleWidget):
                    return option{ThisButtonUI}
        return false

    (ThisButtonUI : buttonui).ActivateTrigger(Player : player):void=
        ThisSignalDestination := ThisButtonUI.ButtonSignal_Send
        if(ThisSignalDestination.SendInstigator?):
            ThisSignalDestination.TriggerToActivate.Trigger(Player)
        ThisSignalDestination.TriggerToActivate.Trigger()

    # Loads all button states that have 'SaveButtonState' turned on
    (Agent : agent).LoadButtonState(ThisButtonUI : buttonui):void=
        if(ThisButtonUI.SaveButtonState?):
            if(ThisWidget := ThisButtonUI.ButtonWidgetPerPlayer[Agent]):
                if(ThisEnabledState := ThisButtonUI.EnabledStateMap[Agent]):
                    ThisWidget.SetEnabled(ThisEnabledState)
                if(ThisVisibleState := ThisButtonUI.VisibleStateMap[Agent]):
                    case(ThisVisibleState):
                        true => ThisWidget.SetVisibility(widget_visibility.Visible)
                        false => ThisWidget.SetVisibility(widget_visibility.Collapsed)
                        _ => Print("~ERROR: Failed to fetch 'ThisVisibleState")
            else:
                Print("~ERROR: Failed to fetch widget!")

(Agent: agent).FindButtonUI(ThisWidget: widget): ?buttonui =の詳細

(Agent: agent).FindButtonUI(ThisWidget: widget): ?buttonui =
    # 指定されたThisWidgetに関連するButtonUIを探索する
    for (ThisButtonUI: ButtonUI):
        # ThisButtonUIに関連するウィジェットがマッチするか確認する
        if (StaleWidget := ThisButtonUI.ButtonWidgetPerPlayer[Agent]):
            if (ThisWidget = StaleWidget):
                # ButtonUIをオプション型で返す
                return option{ThisButtonUI}
    # マッチするButtonUIが見つからない場合はfalseを返す
    return false

(Agent: agent).FindButtonUI(ThisWidget: widget): ?buttonui =についての詳細

widget型である理由

そのボタンに関連するButtonUIとは

buttonui がoptionである理由

(Agent: agent).FindButtonUI(ThisWidget: widget): ?buttonuiでfalseを記述しない理由

for (ThisButtonUI: ButtonUI):の詳細

if (StaleWidget := ThisButtonUI.ButtonWidgetPerPlayer[Agent]):の詳細

【重要】for (ThisButtonUI: ButtonUI)の要素とコレクションについて

ButtonUIに含まれる要素について

StaleWidgetと名付けられた理由

ThisWidgetの意味

マッチ部分の詳細

ButtonWidgetPerPlayer[Agent]を記述する理由は、ThisButtonUIにはウィジェット以外のUIも含まれているからという理由について

【重要】ThisWidget はStaleWidgetと一致しているか確かめる変数であるため、ThisButtonUIのウィジェットのみを表す変数といえる

ThisWidget := Message.Sourceの詳細

return option~return falseの詳細

returnの詳細

return文を使う傾向があるコードの特徴

(ThisButtonUI: buttonui).ActivateTrigger(Player: player): void =の詳細

(ThisButtonUI: buttonui).ActivateTrigger(Player: player): void =
    ThisSignalDestination := ThisButtonUI.ButtonSignal_Send
    if (ThisSignalDestination.SendInstigator?):
        ThisSignalDestination.TriggerToActivate.Trigger(Player)
    ThisSignalDestination.TriggerToActivate.Trigger()

(ThisButtonUI: buttonui).ActivateTrigger(Player: player): void =の詳細

Triggerとプレイヤーの関係性│指定することでできること

Agent と Playerの違い

voidにしている理由

ThisSignalDestination := ThisButtonUI.ButtonSignal_Sendの詳細

ButtonSignal_Sendの詳細

ButtonUI_UserOptions_Eventsの定義

ThisButtonUI.ButtonSignal_Send をシグナルの送信先とする(できる)理由

ThisSignalDestination=シグナルの送信先の詳細

シグナルの送信先とは

if (ThisSignalDestination.SendInstigator?):の詳細

SendInstigatorの意味

ThisSignalDestination.TriggerToActivate.Trigger(Player)の詳細

Trigger関数の詳細

ThisSignalDestination.TriggerToActivate.Trigger()の詳細

まとめ

今回はUIボタンのVerse(4)について解説しました。

お疲れさまでした🍵

長かったですね汗

 僕のTwitterアカウントです。
 Next→
【UEFN】UIボタンの作り方(5ページ目)│Verse解説の続き
【UEFN】UIボタンの作り方(5ページ目)│Verse解説の続き

続きを見る

  • この記事を書いた人
  • 最新記事

あすか(Asuka)

自己紹介:UEFNクリエイター兼ブロガー
Verse言語独学中 | UE・プログラミング・3Dモデリング完全初心者 | 備忘録として学習記録をブログに残しています。
■好きな言葉
徳は弧ならず必ず隣あり.
■ひとこと
まだまだ未熟者ですが、
よろしくお願いします。

-UEFN, Verse言語, メタバース
-, ,