マニュアル: ギミックオブジェクト

このマニュアルについて

このマニュアルでは、ACTION GAME MAKER のギミックオブジェクト(GimmickObject2D)について解説を行います。

ACTION GAME MAKER でのギミックオブジェクトの概要

ギミックオブジェクトは、壊せるブロック・コイン・トゲのように「マップへたくさん並べる仕掛け」のための軽量なノードです。ふつうのオブジェクトと違って毎フレームの処理を持たず、接触・攻撃・連鎖といったきっかけがあったときにだけ動きます。そのため数百個を並べても動作が重くなりません。

そのかわり、ビジュアルスクリプトは持ちません。動作はすべてインスペクターの固定メニューで設定します。自分から移動することもないので、動く仕掛けはふつうのオブジェクトで作ってください。

できることはおおまかに次のとおりです。

  • 耐久力(HP)を持ち、接触や攻撃でダメージを受けて壊れる
  • 壊れたときに音・アニメ・揺れ・パーティクル・エフェクトを出す
  • 壊れたときにアイテムを出す、別のオブジェクトに入れ替わる、スコアドロップを散らす
  • 壊れたときに変数・スイッチを変更する
  • 触れた相手にダメージを与える(トゲ・溶岩)
  • 隣のギミックへ破壊を伝える(連鎖)
  • 通行できない壁になる(タイルのように上に乗れる)

置き方

マップへ直接置く

  1. マップ制作ビューでマップを開きます。
  2. 「マップレイヤー」ドックの追加メニューから「ギミックオブジェクト」を選びます。
  3. 一緒に作られる判定(CollisionShape2D)の形と大きさを合わせ、インスペクターで画像と動作を設定します。

テンプレートから作る

同じギミックをたくさん並べるときは、オブジェクトとして作っておくと使い回せます。

  1. オブジェクト制作ビューで新規作成を開きます。
  2. オブジェクトグループを「Item」または「Platform」にすると、ギミックのテンプレートと空のギミックオブジェクトが一覧に出ます。
  3. テンプレートを選んで作成し、必要に応じて画像や設定を変えます。
  4. 作ったオブジェクトをマップへ配置します。

用意されているテンプレートは次の 5 種類です。

テンプレート 内容
コイン(ギミック) 触れると取れる軽量なコイン。マップにたくさん置けます
壊せる樽 攻撃を受けると壊れ、パーティクルを散らす樽
連鎖するブロック まわりのブロックへ破壊が連鎖するブロック
連鎖する爆弾 爆発して、まわりのギミックを連鎖させる爆弾
トゲ(ギミック) 触れると全方向にダメージを与えるトゲ

画像の設定

ギミックの見た目は、シート画像(コマを並べた 1 枚の画像)から作ります。待機・被弾・破壊のアニメーションを 1 枚の画像にまとめて持たせられます。

  • テクスチャー: 表示するシート画像です。
  • 横の分割数 / 縦の分割数: シート画像を何コマに分けるかを指定します。
  • アニメーションを有効: オンにすると、開始コマから終了コマまでを繰り返します。
  • 開始コマ / 終了コマ: 待機の見た目に使うコマです。アニメーションを使わない場合は、開始コマが静止画として表示されます。
  • コマの間隔(秒): 1 コマを表示する時間です。

待機アニメーションはシェーダーで動くため、いくつ並べても処理が増えません。そのかわり、すべての個体が同じタイミングで動きます。コマの指定は、インスペクター上部のボタンからシート画像を見ながら選べます。

基本の設定

  • HP: 耐久力です。ダメージを受けるたびに減り、0 になると壊れたときの処理が動きます。コインのように 1 回で消えるものは 1 にします。
  • 壊れたあとに元へ戻るか: 「シーンへ入り直すと戻る」はマップへ入り直すたびに元へ戻ります(ブロック向き)。「戻らない」は壊れたままになり、その情報はセーブデータに記録されます(コインなど、取ったままにしたいもの向き)。
  • 所属するオブジェクトグループ: このギミックが属するグループです。攻撃側がグループで相手を絞っている場合は、そのグループを設定しないと当たりません。
  • 通行できないようにする: オンにすると、タイルのように通行を止める壁になります。上に乗ったり、進行を止めたりできます。壁は判定から自動で作られるため、ノードを足す必要はありません。
  • 判定を広げる幅(px): 壁の外側へ検知範囲を広げる幅です。壁は重なる少し手前で攻撃を止めてしまうため、検知を広げておくと当たり判定の取りこぼしを防げます。壁そのものの大きさは変わりません。

ダメージを受けるきっかけ

接触したとき

  • 接触でダメージを受ける: オンにすると、触れられたときにダメージを受けます。コインのような「触れた瞬間に消えるもの」に使います。
  • 接触1回のダメージ: 1 回の接触で減る HP です。0 にすると演出だけを出して壊れません。
  • 反応する相手をグループで限定 / 反応するオブジェクトグループ: 特定のグループに属する相手だけが反応できるようにします。
  • 反応する接触の向き: 「上」「下」「左」「右」から選びます。「上」は相手が上にいる状態=踏まれたとき、「下」は下から叩かれたときです。何も選ばないとどの向きでも反応します。

攻撃を受けたとき

  • 攻撃でダメージを受ける: オンにすると、攻撃でダメージを受けます。攻撃を受ける用の判定ノードを足す必要はありません。
  • ダメージ量の決め方: 「固定値」は常に同じ値、「攻撃側の攻撃力」は攻撃してきたオブジェクトの攻撃力を使います。
  • 攻撃1回のダメージ: 「固定値」のときに減る HP です。0 にすると演出だけを出して壊れません。
  • 反応する攻撃をグループで限定 / 反応する攻撃元のオブジェクトグループ: 特定のグループからの攻撃だけを有効にします。

ダメージを受ける条件

変数やスイッチが指定の値のときだけダメージを受けるようにできます。「パワーアップしてからでないと壊せないブロック」などに使います。条件を満たしていないときは、ダメージにならないときのサウンドで演出だけを返します。

  • 条件を満たすときだけダメージを受ける: この機能を使うかどうかです。
  • 参照する種類: 「変数」または「スイッチ」を選びます。
  • 参照先: 「共通」(プロジェクト全体)「指定のオブジェクト」「接触したオブジェクト」から選びます。
  • 参照する変数・スイッチ: 見る名前です。空にすると条件なしになります。
  • ダメージを受ける変数の値 / ダメージを受けるスイッチの値: この値と等しいときだけダメージを受けます。

触れた相手にダメージを与える

トゲや溶岩のように、触れた相手を傷つける設定です。ダメージは相手の当たり判定へ与えられるため、当たり判定を無効にしている相手は傷つきません。

  • 触れた相手にダメージを与える: この機能を使うかどうかです。
  • 攻撃力の下限 / 攻撃力の上限: 与えるダメージの元になる攻撃力です。同じ値にすると固定ダメージになります。
  • 与えるダメージの属性: 相手の被ダメージ設定と照らし合わされるため、その属性を無効にしている相手はダメージを受けません。
  • 再攻撃時間(秒): 触れ続けている相手に、次にダメージを与えるまでの時間です。0 にすると 1 回だけ与え、離れて触れ直すまで再度ダメージを与えません。相手が無敵の間はダメージが入らないため、実際の間隔はこの時間と無敵時間の長いほうになります。
  • 与える相手をグループで限定 / ダメージを与えるオブジェクトグループ: 特定のグループだけを傷つけるようにします。
  • ダメージを与える接触の向き: 「上」だけを選ぶと、踏んだときだけ刺さって横からは安全なトゲになります。
  • 与えるダメージの計算: ダメージの決め方(LEGACY / CUSTOM)、計算式、端数の処理、最小ダメージを設定できます。CUSTOM では「攻撃の設定」アクションと同じ書き方が使えますが、ギミックは自分の変数を持たないため攻撃側の変数(a. で始まるもの)は空になります。
  • ダメージを与えたときの表示: サウンド・パーティクル・エフェクトと、その表示時間を設定できます。相手が無敵でダメージにならなかったときは再生されません。

ノックバックはギミック側では行いません。吹き飛ばしたい場合は、相手のビジュアルスクリプトで「自分をノックバック」アクションを使ってください。

連鎖

  • 連鎖する: オンにすると連鎖に加わります。隣のギミックから合図を受け取ると壊れ、自分が壊れたときは隣へ合図を送ります。置いた場所から順に崩れていく壁が作れます。
  • 隣へ伝わるまでの時間(秒): 大きくすると、崩れがゆっくり進みます。
  • 斜めにも伝える: オフのときは上下左右にだけ伝わります。
  • 連鎖が届く距離(px): 隣とみなす距離です。ブロックを並べた間隔より少し大きくしておくと、大きさの違うギミックへも伝わります。大きすぎると隙間を飛び越えて伝わってしまいます。

接触と攻撃のきっかけを両方オフにすると、直接は壊せず、連鎖が届いたときだけ崩れる壁になります。

演出

ダメージを受けたときの演出

  • ダメージ時のサウンド / ダメージにならないときのサウンド: ダメージが入ったときと、条件を満たさずダメージにならなかったときで音を分けられます。壊せないブロックの「コツン」という音などに使えます。
  • 被弾アニメーション: 同じシート画像のコマを使って、1 回だけ再生します(開始コマ・終了コマ・コマの間隔)。
  • 被弾時の揺れ: 揺れ幅(px)と揺れる時間(秒)を指定します。
  • 被弾時の表示: パーティクル・エフェクトと表示時間を指定します。

壊れたときの演出

  • 破壊時のサウンド: 壊れたときに鳴らす音です。
  • 破壊アニメーション: 同じシート画像のコマで 1 回だけ再生します。「最後のコマのまま残す」をオンにすると、消えずにその場に残ります(壁と判定は残り、反応だけしなくなります)。叩いたあとの使用済みブロックなどに使えます。
  • 破壊時の揺れ / 破壊時のフェードアウト: 揺れてから消える、じわっと消えるといった見せ方ができます。
  • 破壊時の表示: パーティクル・エフェクトと表示時間を指定します。破壊のパーティクルはワンショットのものを選んでください(ループするものはその場で鳴り続けます)。

壊れたときの結果

  • 破壊時に生成するオブジェクト: 壊れた場所に出てくるオブジェクトです。ブロックから出るアイテムなどに使います。
  • 破壊時のスコアドロップ / 破壊時のスコアドロップの個数: 壊れた場所にコインや経験値オーブを散らします。1 個ずつのオブジェクトではないため、たくさん出しても重くなりません。個数を 0 にすると、スコアドロップ側に設定された個数を使います。
  • 破壊で入れ替えるオブジェクト: 壊れたギミックの代わりに置かれるオブジェクトです。別のギミックを指定すれば、叩くたびに姿が変わるブロックが作れます。
  • 破壊時の変数 / 破壊時のスイッチ: 壊れたときに変数・スイッチを変更します。参照先は「共通」「指定のオブジェクト」「接触したオブジェクト」から選べます。変数は「増減」または「代入」を選べますが、オブジェクトが持つ変数へは代入のみです。コインの取得数を数える、扉のフラグを立てる、といった使い方ができます。

実用例

コイン

  • HP = 1、接触でダメージを受ける = オン、接触1回のダメージ = 1
  • 壊れたあとに元へ戻るか = 戻らない(取ったままにする)
  • 通行できないようにする = オフ
  • 破壊時のサウンドと破壊時の変数(共通の変数「コイン」を 1 増やす)を設定

攻撃で壊せてアイテムが出るブロック

  • HP = 1、攻撃でダメージを受ける = オン、通行できないようにする = オン
  • 破壊時に生成するオブジェクトにアイテムを指定
  • 破壊アニメーションと破壊時のパーティクルで、壊れる瞬間を見せる
  • 壊れたあとに元へ戻るか = シーンへ入り直すと戻る

踏むと壊れる床

  • 接触でダメージを受ける = オン、反応する接触の向き = 上
  • 通行できないようにする = オン
  • 破壊時の揺れとフェードアウトを設定すると、踏んだあとに崩れ落ちる床になります

踏むと痛いトゲ

  • 触れた相手にダメージを与える = オン、攻撃力の下限・上限を設定
  • ダメージを与える接触の向き = 上(横からは安全)
  • 再攻撃時間(秒)で、乗り続けたときの間隔を調整

端から崩れていく壁

  • 連鎖する = オン、連鎖が届く距離をブロックの間隔より少し大きく
  • 崩す起点になる 1 個だけ「攻撃でダメージを受ける」をオンにし、ほかはオフ
  • 隣へ伝わるまでの時間(秒)で崩れる速さを調整

注意点

  • ギミックオブジェクトはビジュアルスクリプトを持てません。また自分から移動しません。動く仕掛けや複雑な条件分岐が必要な場合は、ふつうのオブジェクトを使ってください。
  • 子の判定(CollisionShape2D)は、壁・検知・ダメージ範囲のすべてに使われます。そのため「トゲの先端だけ危険」のように、壁と危険な範囲を分けることはできません。向きの指定で代わりに表現してください。
  • 攻撃が当たらないときは、所属するオブジェクトグループと、攻撃側が絞っているグループがかみ合っているかを確認してください。判定を広げる幅(px)も取りこぼしに効きます。
  • ギミックの設定で指定した変数名・スイッチ名は、変数・スイッチ設定ウィンドウの「参照箇所」検索や名称の一括変更の対象になりません。名前を変えたときは、ギミック側の設定も手で直してください。
  • 待機アニメーションは全個体が同じタイミングで動きます。個体ごとにずらしたい場合は、コマの間隔を変えた別のギミックを用意してください。
  • 「戻らない」を選んだギミックは、壊れた記録がセーブデータに残ります。取り直させたいものには使わないでください。
「いいね!」 1