マニュアル: 壁つかまりと壁蹴りジャンプ

このマニュアルについて

このマニュアルでは、壁につかまる動きの作り方を解説します。使うのは次の 3 つです。

要素 役割
条件「壁にふれた」 つかまれる壁が横にあるかを判定します
アクション「壁につかまる」 つかまっている間の動き(重力停止・追従・ずり落ち・登り降り)を作ります
「オブジェクトの速度を設定」の座標空間「つかんだ壁の反対方向」 壁を蹴って飛ぶ速度を与えます

壁ずり落ち、壁キック、崖へのぶら下がり(崖つかまり)といった動きを、プレイヤーのヴィジュアルスクリプトだけで組めます。重力を止めて左右の壁につかまる動きなので、主にサイドビュー向けの機能です。

ACTION GAME MAKER での壁つかまりの考え方

「どの壁に、いつつかまるか」は作り手が決め、「つかまっている間どう動くか」はアクションが受け持ちます。 つかまる・離れる・蹴るの切り替えは、ヴィジュアルスクリプトの遷移条件で作ります。

つかまり中は、つかんだ壁そのものに追従します。 そのため、縦に置いたコース移動プラットフォームのような動く壁でも、ずり落ちずに一緒に運ばれます。止まっているタイルの壁にも同じようにつかまれます。

使い方

最小構成は次の流れです。

  1. プレイヤーのヴィジュアルスクリプトに「壁つかまり」のステートを作ります。
  2. 通常のステートから「壁つかまり」への遷移条件に、その他条件「壁にふれた」を置きます。
  3. 「壁つかまり」ステートに、その他アクション「壁につかまる」を置きます。
  4. 離れる・ジャンプする遷移を作ります(アクションが外れた時点でつかまりは解除されます)。

「壁にふれた(ContactWithWall)」

その他条件です。指定した側に壁があるときに成立します。壁の探し方は「壁につかまる」アクションとまったく同じなので、この条件が成立した壁は、そのままつかめます。

壁判定

  • このオブジェクトからみた接触方向: 壁を探す側です(左 / 右)。初期値は両方です。どちらかで見つかれば成立します。
  • 壁を探す距離: 自分の壁判定の端から、どこまで先を探すかです(ピクセル)。

対象の壁

  • タイルグループ: 「すべて」「対象外」と、タイル設定で作ったグループから選びます。
  • 対象となるオブジェクトグループ: 「すべて」「対象外」と、プロジェクトのオブジェクトグループから選びます。

くわしくは後述の「つかまれる壁を分ける」を参照してください。

角

  • 角だけを対象にする: 有効にすると、壁が途切れている「角」でだけ成立します。崖つかまりの入口に使います。
  • 角とみなす高さ: 自分の中心から、どれだけ上まで壁の上端を探すかです(ピクセル)。その高さより上まで壁が続いている場合は角として数えません。

「壁につかまる(GrabWall)」

その他アクションです。このアクションが動いている間、オブジェクトは壁につかまった状態になります。

つかまっている間の動き

  • 重力が止まります。 縦の速度も打ち消されるので、ずり落ちる速さを 0 にすればその場で止まれます。
  • 左右の入力では動きません。 位置はつかんだ壁に追従します。
  • つかんだ瞬間に、壁面へ吸い付きます。 壁判定と画像の位置がずれている場合は、左右オフセットで見た目を合わせられます。
  • ほかのステートへ遷移してこのアクションが外れると、つかまりは自動的に解除されます。 解除用のアクションを置く必要はありません。
  • つかまりのステートと上下移動のステートに分けても、つかまりは切れません。 止まっている間と登り降りの間で別のアニメーションを再生したい場合は、両方のステートに「壁につかまる」を置いてください。

つかまり位置

  • つかまる向き: どちら側の壁をつかむかです。
選択肢 内容
自動(近いほうの壁) 左右を見て、近いほうの壁をつかみます(既定)
自分の表示方向 向いている側の壁だけをつかみます
左 / 右 決まった側の壁だけをつかみます
  • 壁を探す距離: 自分の壁判定の端から、どこまで先を探すかです(ピクセル)。大きくすると、壁の小さな切れ目をまたいでもつかまりが切れません。
  • つかまり位置の左右オフセット: 壁面から左右にずらす量です(ピクセル)。プラスの値で壁から離れます。壁判定と画像の位置が合っていないときに使います。
  • つかまり中の表示方向: 「壁の側を向く」(既定)「壁と反対を向く」「変えない」から選びます。つかみ位置へ寄る動きで向きが決まってしまわないよう、つかまっている間はこの指定を保ちます。

つかまれる壁

  • タイルグループ / 対象となるオブジェクトグループ: つかまれる壁を絞り込みます。どちらも初期値は「すべて」です。

角つかまり

  • 角だけを対象にする: 有効にすると、壁が途切れている「角」でだけつかまります。
  • 角とみなす高さ: 自分の中心から、どれだけ上まで壁の上端を探すかです(ピクセル)。
  • 角からの上下オフセット: 角からどれだけ離れてぶら下がるかです(ピクセル。プラスで下)。角を基準に位置を決めるので、どの高さで触っても毎回同じ位置につかまります。

つかまり中の動き

  • ずり落ち方: 「定速」「徐々に加速」から選びます。
選択肢 内容
定速 「ずり落ちる速さ」のまま落ちます(既定)
徐々に加速 「ずり落ちる速さ」から落ち始め、だんだん速くなります
  • ずり落ちる速さ: つかまっている間に落ちる速さです(1 秒あたりのピクセル数)。0 にするとつかまった位置を保ちます。 「徐々に加速」のときは落ち始めの速さになります。
  • ずり落ちの加速度: 「徐々に加速」のときに、1 秒でどれだけ速くなるかです。
  • ずり落ちの上限速度: 「徐々に加速」のときの上限です。0 にすると制限しません。
  • 壁を登り降りする速さ: 上下入力で壁を登り降りする速さです(1 秒あたりのピクセル数)。0 にすると上下入力では動きません。使われるのは、そのオブジェクトの移動に割り当てた上下の入力です。

オプション

  • 壁が途切れたら解除する(既定はオン): 動く足場の端などで壁が見つからなくなったときに、つかまりを自動で解除します。
  • 壁から出ないようにする(既定はオフ): ずり落ちと登り降りが壁の端で止まり、壁から出ていかなくなります。
  • 壁から出ない判定の上オフセット / 下オフセット: 「壁から出ないようにする」で壁を調べる位置です。自分の中心から上下にどれだけ離れた高さで見るかを指定します(ピクセル)。その高さに壁が無くなると、その向きへは進めなくなります。
  • 解除時に壁の速度を引き継ぐ(既定はオン): つかまりを解除したときに、つかんでいた壁の速度を引き継ぎます(動く足場から離れたときと同じ扱いです)。オフにするとその場から落ちます。

つかまれる壁を分ける

「この壁にはつかまれるが、あの壁にはつかまれない」を作るには、壁の側にグループを設定します。

壁の種類 グループの設定場所
タイルの壁 タイル設定の「タイルグループ」
コース移動プラットフォーム / すり抜け床 ノードの「所属するオブジェクトグループ」

そのうえで、条件とアクションの「タイルグループ」「対象となるオブジェクトグループ」を設定します。タイルとオブジェクトは別々に指定します。

タイルグループ 対象となるオブジェクトグループ つかまれる壁
すべて すべて すべての壁(既定)
すべて 特定のグループ すべてのタイル+そのグループのオブジェクト
対象外 特定のグループ そのグループのオブジェクトだけ
特定のグループ 対象外 そのグループのタイルだけ
対象外 対象外 どれにもつかまれません

条件とアクションには同じ設定を入れてください。 片方だけ絞ると「条件は成立するのにつかめない」状態になります。

壁蹴りジャンプ

壁を蹴って反対側へ飛ぶには、ジャンプ用のステートに「オブジェクトの速度を設定」を置き、座標空間を「つかんだ壁の反対方向」にします。

  • プラス X が、つねに壁から離れる向きになります。左右どちらの壁でも同じ設定で飛べるため、壁ごとにステートを分ける必要はありません。
  • Y はワールド座標のままです(マイナスが上)。
  • 上へ 45 度に飛ぶ例: X速度の操作=設定・X=300 / Y速度の操作=設定・Y=-300

アクションノードの「ジャンプ」チェックは使いません。 ジャンプは真上へしか飛ばないため、壁蹴りには向きません。速度を与えるだけで、重力は通常どおり効いて放物線になります。

基準にする壁は、壁から離れたあとも接地するまで覚えています。 そのため、つかまりのステートではなくジャンプ用のステートに置いて構いません。

表示方向を「移動方向」にしているオブジェクトは、蹴った方向を向いて飛びます。壁を押し込んだまま蹴っても、押している側ではなく飛んでいる方向を向きます。

ビジュアルスクリプトの組み方

最小構成(3 ステート)

  1. 通常(立ち・歩き・落下)のステート
  2. 壁つかまりのステート(「壁につかまる」を置く)
  3. 壁蹴りジャンプのステート(「オブジェクトの速度を設定」を置く)

遷移条件の例は次のとおりです。

  • 通常 → 壁つかまり: 「壁にふれた」(落下中だけにしたい場合は、落下の条件と組み合わせます)
  • 壁つかまり → 壁蹴りジャンプ: ジャンプボタンの入力
  • 壁つかまり → 通常: 「壁にふれた」の反転(壁から外れた)、または接地した
  • 壁蹴りジャンプ → 通常: 一定時間の経過、または接地した

つかまりと登り降りを分ける

止まっている間と登り降りの間でアニメーションを変えたい場合は、ステートを 2 つに分けます。

  • 「つかまり」ステート: 「壁につかまる」(壁を登り降りする速さ=0)
  • 「登り降り」ステート: 「壁につかまる」(壁を登り降りする速さ=100 など)
  • 上下入力で「つかまり」→「登り降り」、入力が無くなったら戻す、という遷移にします。

ステートをまたいでもつかまりは切れません。 ずり落ち方など、ステートごとに違う設定を入れても構いません。

崖つかまり

  1. 「崖つかまり」ステートへの遷移条件に「壁にふれた」を置き、角だけを対象にするを有効にします。角とみなす高さは、キャラクターの半分より少し大きい値から試してください。
  2. 同じステートに「壁につかまる」を置き、角だけを対象にするを有効にします。
  3. 角からの上下オフセットで、角から何ピクセル下にぶら下がるかを決めます。
  4. ずり落ちる速さと壁を登り降りする速さは 0 にして、その場で止まるようにします。
  5. 登る・落ちる・飛び降りるは、別のステートへの遷移で作ります。

実用例

壁ずり落ち+壁蹴り

  • 「壁つかまり」ステートのずり落ち方を「徐々に加速」、ずり落ちる速さを 20、ずり落ちの加速度を 200、ずり落ちの上限速度を 150 にすると、張り付いてからだんだん滑り落ちます。
  • ジャンプボタンで壁蹴りのステートへ遷移し、「オブジェクトの速度を設定」(つかんだ壁の反対方向・X=250 / Y=-350)で蹴り出します。

縦に動く足場につかまって運ばれる

  • コース移動プラットフォームを縦向きに置き、足場の種別を「通常の壁」にします。
  • 「壁つかまり」ステートのずり落ちる速さを 0 にすると、足場の上下移動にそのまま運ばれます。
  • 足場の端で落としたい場合は「壁が途切れたら解除する」をオン、端で止めたい場合はオフにして「壁から出ないようにする」をオンにします。

崖にぶら下がって登る

  • 「崖つかまり」ステート(角だけを対象にする・角からの上下オフセット 24 など)でぶら下がります。
  • 上入力で「よじ登り」ステートへ遷移し、そちらで座標移動やアニメーションで登り切る動きを作ります。
  • 下入力やジャンプで「通常」ステートへ戻せば、手を離す動きになります。

つかまれる壁を限定する

  • つかまれるタイルに、タイル設定でタイルグループ(例: 「つかまれる壁」)を設定します。
  • 「壁にふれた」と「壁につかまる」のタイルグループをそのグループに、対象となるオブジェクトグループを「対象外」にします。
  • これで、指定したタイル以外の壁にはつかまらなくなります。

注意点

  • コース移動プラットフォームの「足場の種別」が「一方通行」のままだと、縦の面は壁になりません。 一方通行は下から抜けられる設定のため、横からは素通りします。縦に置いて壁として使う場合は「通常の壁」にしてください。条件のレイは一方通行を無視して当たるので、「条件は成立するのに体が止まらない」状態になります。
  • ステートの「表示方向を変更しない」にチェックが入っていると、「つかまり中の表示方向」は効きません。 ステート側の指定が優先されます。
  • 「壁にふれた」と「壁につかまる」のグループ設定は合わせてください。 片方だけ絞ると、条件は成立するのにつかめません。
  • 角の判定は「その高さに壁があり、指定した高さまで上に壁が無い」で行います。 つかんだあとは、壁があるかどうかだけを見ます(ぶら下がると角が判定位置より上になるためです)。
  • つかまっている間は移動テンプレートよりつかまりが優先されます。 移動テンプレートで動かそうとしても、つかまり側の移動が優先されます。
  • つかまっている間は「足場」として記録されません。 クイックリスタートの「最後に接地した足場へ戻る」では、壁の位置には戻りません。
  • 「壁につかまる」はサブレイヤーでは使えません。 移動を奪うアクションのため、サブレイヤーに置いても実行されません。
  • 解除時の速度の引き継ぎは、「オブジェクトの速度を設定」で値を入れた軸には乗りません。 「設定」で蹴った場合、壁の速度は加算されず、指定した速度どおりに飛びます。足場の勢いも乗せたい場合は「加算」を使ってください。
  • 壁を探す距離には、つかまり位置の左右オフセットのぶんが自動で加算されます。 壁から離して固定しても、そのせいで壁を見失うことはありません。