このマニュアルについて
このマニュアルでは、ACTION GAME MAKER の動作付きボタン(VisualScriptButton / VisualScriptTextureButton)の使い方を解説します。あわせて、ボタンをきれいに並べるための縦並び・横並び(コンテナ)の扱い方と、タイトル画面・ポーズメニュー・ステージセレクトといったメニューの組み立て方を扱います。
動作付きボタンでできること
これまでビジュアルスクリプトだけでメニューを作るには、項目ごとにオブジェクトを置き、「いま何番目を選んでいるか」を変数で持って、入力条件で上下の移動を数える必要がありました。
動作付きボタンを使うと、ボタンを並べるだけでカーソル移動ができ、押したときの動作はインスペクターで選ぶだけになります。
| やりたいこと | 動作付きボタンでの扱い |
|---|---|
| キー・ゲームパッドで項目を選ぶ | 縦並び・横並びに入れたボタンの間を、上下左右でフォーカスが移ります |
| マウスで選ぶ・クリックで決める | マウスを乗せるとフォーカスが移り、クリックで決定します |
| 決定したら何かする | 「ステートを実行」「メニューを開く」「メニューを閉じる」から選びます |
| カーソルを合わせたら説明を変える | 「フォーカスしたとき」に「ステートを実行」を指定します |
| 戻る(キャンセル) | 「キャンセルしたとき」に「メニューを閉じる」を指定します |
| ポーズメニュー | 「メニューを開く」の「一時停止する」で、ゲームを止めてメニューだけ動かします |
| 決定音・カーソル音 | きっかけごとに「鳴らすサウンド」を選びます |
| ボタンの文字に値を出す | <player.HP> のような値の差し込みが使えます(文字のボタンのみ) |
ボタンは 2 種類あります。
| 追加メニューでの名前 | クラス | 見た目 |
|---|---|---|
| ボタン | VisualScriptButton | 文字のボタン(テーマで見た目が決まります) |
| 画像ボタン | VisualScriptTextureButton | 画像で描くボタン(通常・押下・ホバー・フォーカス時の画像を指定します) |
メニュー画面を用意する
メニュー(MenuScene)は、マップ制作ビューで作ります。
- 左列の「マップ」一覧で「+ 新規作成」を押します。
- 種類で「メニュー」を選び、名前を付けて作成します。
- 作ったメニューを開くと、マップレイヤードックにルート直下の CanvasLayer がレイヤーとして並びます。
メニューへの要素の追加は、マップレイヤードックのレイヤーの行にある「+(要素を追加)」から行います。メニューでは次の要素が選べます。
| 要素 | 用途 |
|---|---|
| ラベル / リッチテキスト | 見出し・説明文。値の差し込みも使えます |
| ボタン / 画像ボタン | 動作付きボタン |
| 画像 / 単色矩形 / ナインパッチレクト / パネル | 背景や枠 |
| 縦並び / 横並び | ボタンを並べる入れ物(コンテナ) |
| シンプルゲージ / イメージゲージ | ゲージ |
| オブジェクトを選ぶ… | メニューの動作をビジュアルスクリプトで作るための「管理オブジェクト」 |
ゲーム画面の HUD(マップの UI レイヤー)にも、ボタンと画像ボタンを置けます(後述の「マウス操作のゲームで HUD にボタンを置く」を参照)。
ボタンを並べる(縦並び・横並び)
コンテナの考え方
縦並び(VBoxContainer)と横並び(HBoxContainer)は、中に入れた要素を自動で並べる入れ物です。
- 縦並びは上から下へ、横並びは左から右へ、一覧(マップレイヤードック)での順番どおりに並べます。
- 中に入れた要素の位置と大きさは、コンテナが決めます。 ボタンを 1 つずつドラッグして動かすことはできません(動かそうとすると「コンテナの子の位置とサイズは、その親によってのみ決定されます。」という警告が出ます)。
- 位置を変えたいときは、コンテナ自体を動かします。 中のボタンは並びを保ったまま一緒に動きます。
キーやゲームパッドでのフォーカス移動は、画面上で隣にあるボタンへ移ります。縦並びなら上下、横並びなら左右で、並んだ順に移っていきます。
縦並びにボタンを並べる手順
- CanvasLayer の「+」から「縦並び」を追加します。
- 同じく「ボタン」を必要な数だけ追加します。2 つ目以降は、ボタンを右クリックして「複製」(Ctrl+D)すると、設定ごと増やせます。
- マップレイヤードックで、ボタンを縦並びの行の上へドラッグ&ドロップして中へ入れます。Shift / Ctrl クリックで複数選んでおくと、まとめて入れられます。 一覧での並び順のまま入ります。
- 並び順を変えたいときも、一覧の中でドラッグして入れ替えます(複数をまとめて動かせます)。
- 各ボタンの「テキスト」に表示する文字を入れます。
位置・大きさ・間隔を整える
縦並び・横並びを選ぶと、インスペクターに配置の項目が並びます(「高度な設定」を開かなくても出ます)。
| 変えたいこと | 触る項目 |
|---|---|
| メニューを画面の中央などに置く | 「レイアウト」の「アンカー設定」で「中央」などを選びます |
| 位置を細かくずらす | 「位置」(2D 画面でコンテナをドラッグしても動かせます) |
| ボタンの幅をそろえる・広げる | コンテナの「カスタム最小サイズ」で幅を決め、各ボタンの「コンテナ内のサイズ調整」→「水平」で「塗りつぶし」をオン |
| ボタン同士の間隔 | 「テーマのオーバーライド」→「定数」→「Separation(間隔)」 |
| 並びを上寄せ・中央寄せ・下寄せにする | 「配置」(Alignment) |
| ボタン 1 つの大きさ | ボタンの「カスタム最小サイズ」 |
縦と横を組み合わせる
2 列のメニューや、「はい / いいえ」を横に並べた確認画面は、コンテナを入れ子にして作ります。
CanvasLayer
└ 横並び(HBoxContainer) ← これを動かすと全体が動く
├ 縦並び(VBoxContainer)
│ ├ ボタン「ステージ 1」
│ ├ ボタン「ステージ 2」
│ └ ボタン「ステージ 3」
└ 縦並び(VBoxContainer)
├ ボタン「ステージ 4」
└ ボタン「ステージ 5」
このように組むと、上下キーで列の中を、左右キーで列の間を移動できます。背景が欲しいときは、パネルやナインパッチレクトをコンテナより前(一覧で上)に置きます。
ボタンの動作を設定する
ボタンを選ぶと、インスペクターの先頭に動作付きボタンの設定が並びます。設定は3 つのきっかけごとに分かれています。
| きっかけ | いつ起きるか | 選べる動作 |
|---|---|---|
| 決定したとき | クリックしたとき、またはフォーカス中に決定の入力(既定は A) | なし / ステートを実行 / メニューを開く / メニューを閉じる |
| フォーカスしたとき | キー・ゲームパッドで移ってきたとき、最初のフォーカス、マウスを乗せたとき | なし / ステートを実行 |
| キャンセルしたとき | フォーカス中にキャンセルの入力(既定は B) | なし / ステートを実行 / メニューを閉じる |
きっかけごとに「鳴らすサウンド」も選べます。決定音・カーソル音・キャンセル音に使います。カーソル音(フォーカスしたとき)は、メニューを開いた瞬間の最初のフォーカスと、メニューを閉じてフォーカスが戻ったときには鳴りません。
ステートを実行
指定したオブジェクトのステートを開始します。メニューの動作の大部分はこれで作ります。
- 「相手の指定方法」で、相手の選び方を決めます。
- シーン内のノード: 同じメニューに置いたオブジェクト(管理オブジェクトなど)を「対象ノード」で選びます。
- オブジェクト: 「対象オブジェクト」の「一覧」ボタンからプロジェクトのオブジェクトを選び、「範囲」で単体 / 全体を選びます。プレイヤーなど、マップ側にいるオブジェクトを動かしたいときに使います。
- 「実行するステート」で、相手のステートを選びます。候補は相手のビジュアルスクリプトの本流レイヤーのステートです。
ステートは名前ではなく内部の ID で覚えています。あとから別のステートを足したり消したりしても、指定がずれることはありません。指定したステートを消すと、インスペクターに警告が出ます。
メニューを開く
「開くメニュー」に指定したメニューシーンを開きます(「一覧」ボタンを押すと、メニューの一覧から選べます)。ビジュアルスクリプトの「メニューシーンを表示(OpenMenu)」と同じく、スライドやフェードの演出を付けられます。
- 今のメニューを閉じる: 新しいメニューを開くと同時に、ボタンが置かれているメニューを閉じます。メニューを切り替えたいときに使います(メニューの中に置いたボタンでだけ出ます)。
- 一時停止する: メニューを開く前にゲームを一時停止します(後述の「一時停止」を参照)。
- メニューが全部閉じたら自動で解除: 「一時停止する」をオンにしたときに出ます。既定はオンです。
メニューを閉じる
- 「閉じるメニュー」で、自分が属するメニュー(ボタンが置かれているメニュー)か、最後に開いたメニューを選びます。HUD に置いたボタンでは「最後に開いたメニュー」だけが選べます。
- 「一時停止を解除する」をオンにすると、閉じたあとにゲームを再開します。
メニュー A からメニュー B を開いて B を閉じると、A の押したボタンへフォーカスが戻ります。 キーやゲームパッドの操作をそのまま続けられます。
フォーカスと入力の設定
フォーカスの設定
| 項目 | 既定 | 内容 |
|---|---|---|
| 最初にフォーカスする | オフ | メニューが開いたときに、このボタンにフォーカスを当てます。1 画面に 1 つだけオンにしてください。キーやゲームパッドの操作はこのボタンから始まります |
| マウスを乗せたらフォーカス | オン | マウスを乗せるとフォーカスが移り、「フォーカスしたとき」の動作が行われます |
| 初期フォーカスでも動作を実行 | オン | 最初のフォーカスでも「フォーカスしたとき」の動作を行います。メニューを開いた瞬間に 1 項目めの説明を出したいときに使います |
| 端で折り返す | オフ | 縦並び・横並びの最後の項目で下(右)を押すと先頭へ、先頭で上(左)を押すと最後へ移ります |
「最初にフォーカスする」がどれもオフだと、メニューを開いてもキーやゲームパッドで操作を始められません(マウスなら押せます)。複数のボタンでオンにすると、インスペクターに警告が出ます。
「端で折り返す」は、使う画面のボタンでだけオンにしてください。縦並びの下に、並びとは別の「戻る」ボタンを置いた画面でオンにすると、下を押しても「戻る」へ行かずに先頭へ戻ってしまいます。
決定・キャンセルの入力
| 項目 | 既定 | 内容 |
|---|---|---|
| 決定の入力 | 空欄(プロジェクト設定に従う) | フォーカス中に決定とみなす入力アクション |
| キャンセルの入力 | 空欄(プロジェクト設定に従う) | フォーカス中にキャンセルとみなす入力アクション |
空欄のときは、プロジェクト設定の actg/ui/button_accept_action(既定は A)と actg/ui/button_cancel_action(既定は B)が使われます。入力設定ウィザードの既定では、A は Z キーとゲームパッドの A ボタン、B は X キーとゲームパッドの B ボタンに割り当てられています。
Enter キーと Space キーでは決定されません。 ゲーム中のジャンプなどにも使われるキーで、意図せずボタンが決定されるのを防ぐためです。Enter / Space でも決定したい場合は、「決定の入力」に ui_accept を選んでください。指定した入力アクションがプロジェクトから消えている場合は、警告を出したうえで Enter / Space と Escape に切り替わります。
メニューの動作をビジュアルスクリプトで作る(管理オブジェクト)
ボタンの「ステートを実行」は、メニューの中に置いたオブジェクトのステートを呼ぶのが基本の形です。
- Area2DGameObject などのオブジェクトを 1 つ作り、メニューを管理するビジュアルスクリプトを持たせます(以下「管理オブジェクト」)。
- メニューの CanvasLayer の「+」から「オブジェクトを選ぶ…」で、管理オブジェクトを置きます。
- 管理オブジェクトのビジュアルスクリプトに、ボタンから呼ぶステートを作ります(「ステージ 1 の説明を出す」「ステージ 1 へ進む」など)。
- 各ボタンの「相手の指定方法」を「シーン内のノード」にし、「対象ノード」に管理オブジェクト、「実行するステート」にそのステートを選びます。
説明文や画像の切り替えは、管理オブジェクトのステートで「プロパティを変更」を使い、ラベルの文字や画像の表示・非表示を変えるのが手軽です。
組み合わせ例
ポーズメニュー
- ポーズメニュー用のメニューを作り、「再開」「タイトルへ」などのボタンを縦並びに入れます。
- 「再開」のボタンに次を設定します。
- 決定したとき: 動作「メニューを閉じる」、閉じるメニュー「自分が属するメニュー」、「一時停止を解除する」をオン
- 「最初にフォーカスする」をオン
- 各ボタンの「キャンセルしたとき」も、「再開」と同じく「メニューを閉じる」+「一時停止を解除する」にしておくと、どのボタンにいても B で戻れます(複数選択してまとめて設定できます)。
- ゲーム側でポーズメニューを開きます。
- プレイヤーのビジュアルスクリプトから開く場合: ポーズの入力で遷移するステートに「メニューシーンを表示(OpenMenu)」を置き、「一時停止する」をオンにします。
- HUD のボタンから開く場合: 決定したときの動作を「メニューを開く」にし、「一時停止する」をオンにします。
ステージセレクト
- ステージの数だけボタンを並べます(上の「縦と横を組み合わせる」の形が使えます)。
- 説明文のラベルやプレビュー画像と、管理オブジェクトを置きます。
- 各ボタンに次を設定します。
- フォーカスしたとき: 「ステートを実行」で、管理オブジェクトの「ステージ N の説明を出す」ステート
- 決定したとき: 「ステートを実行」で、管理オブジェクトの「ステージ N へ進む」ステート(そのステートでシーンを移動します)
- 1 つ目のボタンだけ「最初にフォーカスする」をオンにします。「初期フォーカスでも動作を実行」がオンなら、開いた瞬間に 1 つ目の説明が出ます。
メニューから別のメニューへ
- 重ねて開く(オプション画面を開いて、閉じたら元へ戻る): 決定したときを「メニューを開く」にするだけです。開いた側の「戻る」ボタンを「メニューを閉じる」(自分が属するメニュー)にすると、閉じたときに元のメニューのボタンへフォーカスが戻ります。
- 切り替える(タイトル → ステージセレクトのように、元の画面は要らない): 「メニューを開く」で「今のメニューを閉じる」をオンにします。新しいメニューを先に開いてから、元のメニューを閉じます。
- 一時停止中に重ねて開いたメニューも動きます。切り替えても一時停止は続きます。
マウス操作のゲームで HUD にボタンを置く
マップの UI レイヤーの「+」から「ボタン」「画像ボタン」を置けます。HUD に置いたボタンは、ゲーム中のキー(Space など)で決定されないよう、フォーカスを持たない設定で置かれます(フォーカス →「モード」が「なし」)。マウスのクリックでだけ反応します。
「クリックで攻撃」のように、マウス入力の条件で動くオブジェクトがいる場合、そのままではボタンを押したクリックで攻撃も出てしまいます。 マウス操作の条件で「ボタンの上では成立しない」をオンにすると、カーソルがボタンの上にある間はその条件が成立しなくなります。
一時停止
「メニューを開く」(ボタン・ビジュアルスクリプトのアクションの両方)の「一時停止する」をオンにすると、メニューを開く前にゲームを一時停止します。
| 対象 | 一時停止中 |
|---|---|
| ゲームシーンのオブジェクト・物理・カメラ・エフェクト | 止まります |
| マップの UI レイヤー(HUD)のボタン | 止まります |
| 開いているメニューと、一時停止中に開いたメニュー(中のボタン・管理オブジェクト) | 動きます |
| メニューの開閉の演出 | 動きます |
| BGM・効果音 | 流れ続けます |
解除の方法は次の 3 つです。
- ボタンの「一時停止を解除する」(決定したとき・キャンセルしたとき)
- ビジュアルスクリプトの「メニューを非表示(CloseMenu)」の「一時停止を解除する」
- 表示中のメニューが 0 個になったときの自動解除(「メニューが全部閉じたら自動で解除」がオンのとき)
HUD のボタンも止まるので、HUD だけで「一時停止 / 再開」を切り替えることはできません。 再開するボタンは、開いたメニューの側に置いてください。
止める範囲を自分で選びたい場合(背景のアニメは動かしたまま、キャラクターだけ止めるなど)は、一時停止を使わずに、メニューを開くステートでスイッチを ON にし、止めたいオブジェクトの遷移条件に「スイッチが OFF」を入れる組み方もできます。
注意点
- ボタンを 1 つずつ動かせないのはコンテナの仕様です。 位置を変えるときはコンテナを動かしてください。
- 「最初にフォーカスする」は 1 画面に 1 つだけオンにしてください。どれもオフだと、キーやゲームパッドで操作を始められません。
- 決定・キャンセルは Enter / Space / Escape ではなく、既定では A / B(Z / X キー)です。 変えたいときは「決定の入力」「キャンセルの入力」か、プロジェクト設定を変更します。
- ボタンの決定と同じ入力を、ほかのオブジェクトの「入力に関する条件」でも見ていると、両方が反応します。 メニューを開いている間は一時停止するか、スイッチでほかのオブジェクトの動きを止めてください。
- メニューの開閉の演出中は、ボタンは反応しません。
- 「ステートを実行」の相手が「オブジェクト」で範囲が「単体」のときは、同じオブジェクトが複数いると、そのうちの 1 体だけが動きます。特定の 1 体を動かしたいときは、「シーン内のノード」で指定してください。
- テキスト表示・画像表示の表示物はクリックを通すので、表示中でも裏にあるボタンを押せます。押させたくないときは、ボタンを隠すか「無効」にしてください(「プロパティを変更」で切り替えられます)。
- 既に置いてある Godot 標準の Button / TextureButton は、動作付きボタンにはなりません。動作を付けたいときは、メニューの「+」から「ボタン」「画像ボタン」を置き直してください。