CommonButtonBase を親クラスにしたボタンには、無効化(クリックなどの操作を制限)する方法がいくつか用意されています。
それぞれの無効状態によって、見た目や呼び出されるイベントが異なるため、違いをまとめました。
確認環境
Unreal Engine 5.5.4
ボタン無効化の種類
CommonButtonBase には、以下の 3 種類の無効化方法が用意されています。
完全無効化
ボタンをフォーカス対象から外し、完全に操作できない状態にします。
ボタンの「無効化」といえば通常この状態を指すと思いますが、本記事では他の無効化方法と区別するため「完全無効化」と呼んでいます。
SetIsEnabled ノードで有効/無効を切り替えます。

インタラクション無効化
ボタンへのホバーやクリックは無効化されますが、フォーカスは可能(キーボードの矢印キーやゲームパッドの十字キーによるフォーカス移動が可能)な状態になります。
SetIsInteractionEnabled ノードでインタラクション有効/無効を切り替えます。

ロック
ボタンへのフォーカスやホバーは可能なまま、クリック操作だけを制限します。
ロック中は、通常のクリックイベント OnClicked の代わりに OnLockClicked が呼び出されます。
SetIsLocked ノードでロック/ロック解除を切り替えます。

無効化の種類による違いまとめ
無効化の種類によって見た目や挙動にも違いがあるため、整理してまとめました。
ボタンスタイル(見た目)の違い
| 状態 | 見た目の挙動 |
| 完全無効化 SetIsEnabled |
ボタンスタイルの「無効 > Disabled」が反映されます。 |
| インタラクション無効化 SetIsInteractionEnabled |
自動で半透明になります。 半透明にしたくない場合は、ボタンの詳細設定にある ApplyAlphaOnDisable をオフにしてください。 |
| ロック SetIsLocked |
通常時と同じボタンスタイルが反映されます。 (ロック専用のスタイルは用意されていません。) |
サウンドの違い
| 状態 | サウンド |
| 完全無効化 SetIsEnabled |
サウンドなし |
| インタラクション無効化 SetIsInteractionEnabled |
サウンドなし |
| ロック SetIsLocked |
ロック専用のサウンドが設定可能です。 ボタンスタイルの以下の項目から設定できます。 |
呼び出されるイベントの違い
無効化の種類によって、呼び出されるイベントにも違いがあります。
以下の表にまとめました。
○:イベントが呼び出される ×:イベントが呼び出されない
| イベント名 | 完全無効化SetIsEnabled | インタラクション無効化 SetIsInteractionEnabled |
ロック SetIsLocked |
| OnClicked | × | × | × |
| OnDoubleClicked | × | × | × |
| OnPressed | × | × | ○ |
| OnReleased | × | × | ○ |
| OnHovered | × | × | ○ |
| OnUnhovered | × | × | ○ |
| OnFocused | × | ○ | ○ |
| OnUnfocused | × | ○ | ○ |
| OnLockedChanged | × | × | ○ |
| OnLockClicked | × | × | ○ |
| OnLockDoubleClicked | × | × | ○ |
| OnEnabled | ○ | × | × |
| OnDisabled | ○ | × | × |
| OnSelected ※Selectable 設定をオンにしておく必要あり |
× | × | ○ |
| OnDeselected ※Selectable 設定をオンにしておく必要あり |
× | × | ○ |
| OnInputActionTriggered ※TriggeringInputAction を設定しておく必要あり |
× | × | ○ |
あとがき
CommonButtonBase は標準のボタンより細かく操作の制限をかけられるのが良いですね。
制限のかけ方にも微妙な違いがあるので、状況に応じてうまく使い分けていきたいです。
記事の内容について、誤字脱字、内容の誤り、感想などありましたら気軽にコメントしていただけると嬉しいです。(このブログでも SNS でも歓迎です。)