マニュアル: 共有ボード(Blackboard)

このマニュアルについて

このマニュアルでは、ACTION GAME MAKER に搭載された共有ボード(Blackboard)機能について解説を行います。

ACTION GAME MAKER での共有ボードの概要

共有ボードは、オブジェクト間で値やオブジェクト参照を受け渡すための置き場です。エディタであらかじめ「キー」を定義しておき、ゲーム中にそのキーへ値を読み書きします。

変数・スイッチとの違いは、次の 2 点です。

  • 型を指定して定義するため、数値や文字列だけでなく、座標やオブジェクトそのものへの参照を置けます。
  • スコープをキーごとに選べるため、全オブジェクトで 1 つの値を共有することも、オブジェクトごとに別の値を持つこともできます。

とくに「オブジェクト参照」を置けることが大きな違いです。従来はロック機能に頼るしかなかった「どのオブジェクトを狙うか」を、共有ボードに記録して他のアクション・条件へ受け渡せます。「一番近い敵」「HP が最も高い敵」を検索して記録し、それを狙って撃つ、といった作りができます。

キーを定義する

共有ボードのキーは「変数・スイッチ設定」ウィンドウの「共有ボード」タブ(5 番目のタブ)で定義します。ウィンドウは次の場所から開けます。

  • オブジェクト制作ビューの「変数・スイッチを設定」ボタン
  • ビジュアルスクリプトビューの「変数・スイッチを設定」ボタン
  • インスペクターの変数設定・スイッチ設定に表示される「変数・スイッチを設定」ボタン
  • データベースの「プロジェクト変数・スイッチを設定」ボタン

「追加」でキーを作り、右側で内容を設定します。

  • 名前: ビジュアルスクリプトから選ぶときのキー名です。
  • スコープ: 「共有(全オブジェクト)」または「オブジェクトごと」を選びます。
  • 型: 値の種類を選びます(下表)。
  • 初期値: ゲーム開始時の値です。オブジェクト参照型には初期値がありません。
  • セーブ対象: チェックすると、セーブ・ロードで値が保存されます。
  • メモ: 用途などの覚え書きです。動作には影響しません。

「参照箇所」ボタンで、選んでいるキーをビジュアルスクリプトのどこで使っているかを検索できます。キーを削除すると、そのキーを参照している設定は参照を失って動作しなくなるため、削除よりも使い回しを推奨します。

キーの型

型 内容
オン・オフ ON / OFF の 2 値です
整数 整数値です
数値 小数を含む数値です
文字列 文字列です
座標(Vector2) X と Y の座標値です
オブジェクト参照 オブジェクト 1 体への参照です
オブジェクト参照リスト オブジェクト複数体への参照です

スコープの選び方

「共有(全オブジェクト)」は、ゲーム全体で 1 つの値を持ちます。ボスの撃破フラグ、現在の目的地、プレイヤーの参照など、全員が同じ答えを見るものに使います。

「オブジェクトごと」は、オブジェクト 1 体ごとに別の値を持ちます。「自分から一番近いプレイヤー」のように、オブジェクトごとに答えが違うものはこちらを選びます。共有スコープにしてしまうと、各オブジェクトが互いの記録を上書きしてしまいます。

値の寿命とセーブ

  • 値はゲーム開始時に初期値へ戻ります。
  • シーン切替では保持されます(共有スコープの値は、マップを移動しても残ります)。
  • 「セーブ対象」のキーは、セーブ・ロードで保存されます。オブジェクトごとのキーは、そのオブジェクトのセーブデータに一緒に保存されます。
  • オブジェクト参照キーは、設定に関わらずセーブされません。参照はゲーム実行中のみ有効な情報で、ロード後に同じ個体を指し直すことができないためです。

アクションと条件

共有ボードを扱うアクションは「その他アクション追加」の「スイッチ/変数」カテゴリ、条件は「その他条件追加」の「変数」カテゴリにあります。

共有ボードへ値を設定(SetBlackboardValue)

共有ボードのキーへ値を書き込みます。

  • キー名: 書き込み先のキーです。
  • 演算子: 「=」のほか、数値・整数キーでは「+=」「-=」「*=」「/=」「%=」が使えます。
  • 代入する値: 出どころを「数値」「変数 / スイッチ」から選びます。オブジェクト参照キーのときは「自分自身」を選べて、このアクションを実行したオブジェクト自身の参照を記録します。
  • 変数から取る場合は、所属(自分、指定オブジェクト、ロック中のオブジェクト、自身の親、最後に接触したオブジェクト、共有ボードのオブジェクト、プロジェクトの変数)と変数名を指定します。

共有ボードの値を判定(BlackboardValueCompare)

共有ボードのキーの値を比較して判定します。

  • キー名: 判定するキーです。
  • 比較条件: 「==」「!=」「<」「<=」「>」「>=」から選びます。オブジェクト参照キーでは「有効なオブジェクト参照を持つ」のみになります。
  • 比較する相手: 「数値」「別の共有ボードキー」「変数 / スイッチ」から選びます。

オブジェクト参照キーの「有効なオブジェクト参照を持つ」は、記録した相手がまだ生きているかの判定に使えます。倒された相手は無効な参照になるため、次の相手を探し直す流れを作れます。

オブジェクトを検索して共有ボードに記録(SearchObjectToBlackboard)

条件で絞り込んだオブジェクトの参照を、共有ボードへ記録します。

  • キー名: 記録先のキーです。オブジェクト参照キー、またはオブジェクト参照リストキーを指定します。
  • ターゲットグループを指定: 「すべてのオブジェクト」以外を選ぶと、そのオブジェクトグループに属するものだけを探します。
  • 距離範囲(0で無制限): 自分からの距離(px)で候補を絞ります。
  • 自分を除外(初期値 ON): 検索したオブジェクト自身を候補から外します。
  • 並び替え基準: 「距離」「オブジェクトの変数」「HP」から選びます。
  • 並び順: 「昇順(近い・小さい順)」「降順(遠い・大きい順)」から選びます。
  • 並び替えに使う変数: 基準が「オブジェクトの変数」のときに使う変数名です。名前の候補は「変数の列挙用シーン」から列挙しますが、実際の値は見つかった各オブジェクトから読みます。
  • 記録する件数: 記録先がオブジェクト参照リストキーのとき、上位何件を記録するかを指定します。

該当するオブジェクトが無かった場合は、無効な参照(リストキーなら空リスト)が記録されます。記録の有無は「共有ボードの値を判定」で確かめられます。

記録したオブジェクトの使い道

共有ボードのオブジェクト参照キーは、次の場所で対象の指定に使えます。

使う場所 指定方法
変数・スイッチの指定欄 所属に「共有ボードのオブジェクト」を選ぶと、記録した相手の変数・スイッチを読み書きできます
プロパティを変更(ChangeObjectProperty) 対象に「共有ボードのオブジェクト」を選びます
スイッチ・変数が変化した(SwitchVariableChanged) 監視対象に共有ボードのオブジェクトを選びます
オブジェクトを持ち上げる(CarryObject) 相手の指定方法に「共有ボードのオブジェクト」を選びます
弾の飛び方(弾データベース) 初期の飛び方に「共有ボードのオブジェクト方向に飛ぶ」、変化に「共有ボードのオブジェクトを追尾」を選びます

オブジェクト参照リストキーを指定したときの扱いは、次のようになります。

  • 複数の相手へ同時に効く欄(プロパティを変更など)は、リストに入っている全員へ適用されます。
  • 相手が 1 体に決まる欄は、リストの先頭で生きているものが対象になります。
  • 弾は、発射した弾の順番でリストへ振り分けられます。発射数を対象の数に合わせると 1 体ずつ狙い、超える分は先頭から繰り返します。

すでに消えたオブジェクトは、どの経路でも自動的に対象から外れます。

テキストへの差し込み

「テキストを表示」などの文字列には、共有ボードの値を差し込めます。記法は次のとおりです。

記法 出力
<board.キー名> そのキーの値。オン・オフ型は ON / OFF になります
<board.キー名> (オブジェクト参照型) 記録したオブジェクトのルートノード名。リストは「, 」で連結します

オブジェクトごとのスコープのキーは、持ち主のオブジェクトがある場所からのみ読めます。UI レイヤーのラベルなど、持ち主が無い場所では共有スコープのキーだけが使えます。

実行中の値を確認する

値が思ったとおりに入っているかは、アクツクデバッグモニターで確認できます。デバッグメニューの「アクツクデバッグモニターを起動…」で開き、「共有ボード」タブを見てください。

  • 値の欄をダブルクリックすると書き換えられます(オブジェクト参照は書き換えできません)。
  • オブジェクトごとの値は、そのオブジェクトが共有ボードを読み書きしたあとに表示されます。

共有ボードの実用例

一番近い敵を狙う砲台

砲台側のビジュアルスクリプトで、次のように組みます。

  • 定期的に「オブジェクトを検索して共有ボードに記録」
    • キー名 = 狙う相手(オブジェクト参照 / オブジェクトごと)
    • ターゲットグループ = 敵、並び替え基準 = 距離、並び順 = 昇順
  • 「共有ボードの値を判定」でキーが有効なオブジェクト参照を持つときだけ発射アクションへ遷移
  • 弾データベースの初期の飛び方に「共有ボードのオブジェクト方向に飛ぶ」を設定し、キーへ同じキーを指定

自分から一番近い相手はオブジェクトごとに違うため、キーのスコープは「オブジェクトごと」にします。

HP が最も高い敵を 3 体まで狙う

  • キーの型を「オブジェクト参照リスト」にします。
  • 「オブジェクトを検索して共有ボードに記録」で、並び替え基準 = HP、並び順 = 降順、記録する件数 = 3 を設定します。
  • 弾を 3 発発射する設定にして、変化に「共有ボードのオブジェクトを追尾」を指定すると、3 体へ 1 発ずつ向かいます。

ボスの撃破フラグ

  • キーの型を「オン・オフ」、スコープを「共有(全オブジェクト)」、セーブ対象を ON にします。
  • ボスの撃破時に「共有ボードへ値を設定」で ON にします。
  • 扉やイベント側は「共有ボードの値を判定」で ON を見て開くようにします。

シーンをまたいでも値が残り、セーブ・ロードにも対応します。

プレイヤーの参照を配る

  • キーの型を「オブジェクト参照」、スコープを「共有(全オブジェクト)」にします。
  • プレイヤー側の開始アクションで「共有ボードへ値を設定」を使い、代入する値に「自分自身」を選んで記録します。
  • 敵や仕掛けは、変数の指定欄で所属に「共有ボードのオブジェクト」を選べば、プレイヤーの変数を読めます。

注意点

  • 共有ボードへの書き込みでは、シーン遷移条件の再判定は行われません(変数・スイッチとの意図的な違いです)。シーンを切り替えたい場合は、変数・スイッチ側で行ってください。
  • キーを削除すると、そのキーを参照しているビジュアルスクリプトの設定は参照を失います。削除の前に「参照箇所」で使用箇所を確認してください。
  • オブジェクト参照キーはセーブされません。ロード後に相手を指し直す必要がある場合は、ロード後に検索アクションを実行してください。
  • 複合代入(+= など)は数値・整数のキーでのみ使えます。
  • オブジェクトごとのスコープのキーは、持ち主のオブジェクトが無い場所(UI レイヤーのラベルなど)からは読めません。
「いいね!」 4