マニュアル: オブジェクトの速度と強制移動エリア

このマニュアルについて

このマニュアルでは、ACTION GAME MAKER でオブジェクトに速度を与える 2 つの機能、実行アクション「オブジェクトの速度を設定(SetObjectVelocity)」とマップ要素「強制移動エリア(ForceArea2D)」について解説を行います。

ACTION GAME MAKER での速度の概要

オブジェクトの移動は、ふだんは移動テンプレートやプレイヤーの入力によって作られます。これに対して、この 2 つの機能は移動とは別に「外から与えた速度」をオブジェクトへ持たせます。ジャンプ台で打ち上げる、ベルトコンベアで運ぶ、水流で流す、攻撃を受けて吹き飛ぶ、といった動きに使います。

速度の単位はどちらも 1 秒あたりのピクセル数(px/s)です。X はプラスが右、Y はプラスが下です。上へ飛ばしたいときは Y にマイナスの値を入れます。

与えた速度は与えた瞬間だけのものではなく、そのオブジェクトが保持し続けます。消えるタイミングは後述の「与えた速度はいつ消えるか」を参照してください。

「オブジェクトの速度を設定(SetObjectVelocity)」

ビジュアルスクリプトから速度を与えるアクションです。「その他アクション追加」の「オブジェクト操作」カテゴリにあります。条件と組み合わせて、ボタンを押した瞬間にダッシュさせる、被弾したら吹き飛ばす、といった使い方ができます。

対象の指定

  • 移動対象の種類: 「グループ」「指定のオブジェクト」「最後に接触したオブジェクト」「ロックしたオブジェクト」から選びます。
  • グループ: 種類が「グループ」のとき、対象のオブジェクトグループを選びます。「すべてのオブジェクト」を選ぶと全員が対象です。
  • データタイプ: 種類が「指定のオブジェクト」のとき、「自分自身」「自分以外のオブジェクト全て」「指定のオブジェクト」から選びます。
  • 対象オブジェクトのパス / 対象オブジェクトの範囲: データタイプが「指定のオブジェクト」のとき、対象のオブジェクトファイルと、単体か全体かを指定します。

速度の指定

  • X速度の操作 / Y速度の操作: 「変更しない」「設定」「加算」から選びます。「設定」はいまの速度を無視して指定した値にし、「加算」はいまの速度に指定した値を足します。両方を「変更しない」にすると何も起きません。
  • 速度: 与える速度(px/s)です。X と Y をそれぞれ指定します。
  • 座標空間: 「ワールド」(初期値)または「ローカル」を選びます。ワールドは画面の軸(右がプラスX、下がプラスY)で、ローカルはアクションを実行したオブジェクトの回転に合わせて軸が回ります。大きさ(スケール)は無視されます。

このアクションはステートに入るたびに 1 回だけ実行されます。毎フレーム押し続ける動きが必要な場合は、後述の強制移動エリアの「設定」や「徐々に加速」を使ってください。

「強制移動エリア(ForceArea2D)」

マップ上に置いた範囲へ入ったオブジェクトの速度を操作するマップ要素です。ビジュアルスクリプトを組まずに、ベルトコンベア・水流・ジャンプ台・上昇気流などを作れます。

置き方

  1. マップ制作ビューでマップを開きます。
  2. 「マップレイヤー」ドックの追加メニューから「強制移動エリア」を選びます。
  3. 一緒に作られる ForceCollision(128 x 128 の四角形)の形と大きさを、効果を出したい範囲に合わせます。
  4. インスペクターで速度の操作を設定します。

効果を受けるオブジェクト

効果を受けるのは、エリアのコリジョンマスクで検出されたゲームオブジェクト本体の壁判定です。当たり判定や攻撃判定に触れても発動しません。軽量オブジェクトは、そのオブジェクト自身が範囲に入ったときに対象になります。

  • グループ: 「すべてのグループ」または指定したオブジェクトグループのみを対象にします。
  • エリアを持っているオブジェクト自身は対象になりません(オブジェクトの中に強制移動エリアを入れて使う場合も、自分は動きません)。

速度の操作

  • 座標空間: 「ローカル」(初期値)または「ワールド」を選びます。ローカルはエリアを回転させると力の向きも一緒に回るため、斜めのベルトコンベアや斜めに吹き上げる風を作れます。ワールドはエリアの回転に関係なく画面の軸で働きます。大きさ(スケール)は無視されます。
  • X速度の操作 / Y速度の操作: 「変更しない」「設定」「進入時に加算」「徐々に加速」から選びます(下表)。
  • 速度: 「設定」「進入時に加算」で使う速度(px/s)です。
  • 加速度: 「徐々に加速」で使う加速度(px/s²)です。
  • 最高速度: 「徐々に加速」のときの上限(px/s)です。0 にすると上限なしで加速し続けます。
操作 内容 向いているもの
変更しない その軸の速度に触りません 片方の軸だけを操作したいとき
設定 範囲にいる間、毎フレームその速度に上書きします ベルトコンベア、一定速度の水流
進入時に加算 範囲に入った瞬間に 1 回だけ加算します。出て入り直すと、もう一度加算されます ジャンプ台、打ち上げ
徐々に加速 物理フレームごとに加速度を足していきます 上昇気流、重力ゾーン

設定できる欄は、選んだ操作にあわせて表示が切り替わります。

退出時の設定

  • 退出時のX速度 / 退出時のY速度: 「速度を保持」(初期値)または「停止」を選びます。「速度を保持」は、範囲を出たあともエリアで得た速度をそのまま持ち続けます。「停止」は範囲を出た瞬間にその軸の速度を 0 にします。

ジャンプ台や吹き上げのように、出たあとも飛んでいってほしいものは「速度を保持」、範囲の中だけで動かしたいものは「停止」を選びます。

与えた速度はいつ消えるか

外から与えた速度は、オブジェクトが保持し続けます。消えるのは次のタイミングです。

  • 上下方向の速度: 着地すると消えます。空中にいる間は残り、そこへ重力が加算されていきます。
  • 横方向の速度: 接地していて、新しい速度が与えられていないときに消えます。
  • 強制移動エリアを出たあとは、退出時の設定が「速度を保持」なら残り、「停止」ならその軸だけ 0 になります。

そのため、ジャンプ台で打ち上げられたオブジェクトは着地するまで飛び続け、氷の上を滑るような動きは接地したあと自然に止まります。なお接地している最中に上向きの速度を与えた場合は、床から離れるまでの数フレームだけ、上下方向の速度が消えないように保護されます。

使い分け

作りたいもの 使う機能と設定
ベルトコンベア 強制移動エリア: X速度の操作 = 設定
水流 強制移動エリア: 流したい軸 = 設定(斜めに流すならローカル座標でエリアを回転)
ジャンプ台・打ち上げ 強制移動エリア: Y速度の操作 = 進入時に加算(Y にマイナスの値)
上昇気流・重力ゾーン 強制移動エリア: Y速度の操作 = 徐々に加速 + 最高速度
範囲の中だけ動かす 強制移動エリア: 退出時の速度 = 停止
ボタンでダッシュ オブジェクトの速度を設定: X速度の操作 = 設定
被弾で吹き飛ぶ オブジェクトの速度を設定: 両軸 = 設定(または「自分をノックバック」アクション)
別のオブジェクトを動かす オブジェクトの速度を設定: 移動対象の種類でグループやロック対象を指定

実用例

ベルトコンベア

  • 強制移動エリアを床の上に置き、コリジョンを床の長さに合わせます。
  • 座標空間 = ワールド、X速度の操作 = 設定、速度 X = 100 にします。
  • 退出時のX速度 = 停止にすると、コンベアを降りた瞬間に流れが止まります。「速度を保持」にすると、降りたあとも少し滑ります。

ジャンプ台

  • 強制移動エリアを台の上に薄く置きます。
  • Y速度の操作 = 進入時に加算、速度 Y = -600 にします。
  • 退出時のY速度 = 速度を保持にします(停止にすると、範囲を出た瞬間に落ちてしまいます)。

上へ吹き上げる風

  • 強制移動エリアを風の範囲に置きます。
  • Y速度の操作 = 徐々に加速、加速度 Y = -400、最高速度 Y = 200 にします。
  • 加速度が重力に打ち勝つと上へ運ばれ、最高速度で頭打ちになります。範囲を出ると重力で落ち始めます。

ボタンでダッシュ

  • プレイヤーのビジュアルスクリプトに、ダッシュボタンの入力条件を作ります。
  • 「オブジェクトの速度を設定」を置き、移動対象の種類 = 指定のオブジェクト、データタイプ = 自分自身にします。
  • 座標空間 = ワールド、X速度の操作 = 設定、速度 X にダッシュの速さを入れます。向きによって符号を変えたい場合は、右向き用と左向き用のアクションを分けるか、表示方向を見る条件で分岐します。

注意点

  • 「オブジェクトの速度を設定」で座標空間を「ローカル」にすると、左右反転しているオブジェクトでは上下の符号が反転します(左を向いている間は、Y のマイナスが下方向になります)。アニメーションの表示方向による左右反転は仕様しないか、上下方向を確実に指定したい場合は「ワールド」を使ってください。
  • 「オブジェクトの速度を設定」で座標空間を「ローカル」にすると、「変更しない」を選んだ軸も現在の速度で書き戻されます。片方の軸だけを触りたい場合は「ワールド」のほうが素直に働きます。
  • 強制移動エリアの範囲にいる間は毎フレーム速度が与えられるため、接地していても横方向の速度は消えません。範囲の中で止まってほしい場合は、速度に 0 を設定するか、退出時の設定で止めてください。
  • 持ち上げられているオブジェクトは、持ち上げアクションで「移動を止める」が有効な間、外からの速度を受け取りません(降ろした瞬間に溜まった速度で暴発しないようにするためです)。
  • 強制移動エリアは、当たり判定・攻撃判定では発動しません。効果が出ないときは、エリアのコリジョンマスクと、対象オブジェクトの壁判定のコリジョンレイヤーがかみ合っているかを確認してください。
  • 「徐々に加速」で最高速度を 0 のままにすると、範囲にいる限り加速し続けます。壁抜けなどの原因になるため、上限を入れておくことを推奨します。