このマニュアルについて
このマニュアルでは、壁につかまる動きの作り方を解説します。使うのは次の 3 つです。
| 要素 | 役割 |
|---|---|
| 条件「壁にふれた」 | つかまれる壁が横にあるかを判定します |
| アクション「壁につかまる」 | つかまっている間の動き(重力停止・追従・ずり落ち・登り降り)を作ります |
| 「オブジェクトの速度を設定」の座標空間「つかんだ壁の反対方向」 | 壁を蹴って飛ぶ速度を与えます |
壁ずり落ち、壁キック、崖へのぶら下がり(崖つかまり)といった動きを、プレイヤーのヴィジュアルスクリプトだけで組めます。重力を止めて左右の壁につかまる動きなので、主にサイドビュー向けの機能です。
ACTION GAME MAKER での壁つかまりの考え方
「どの壁に、いつつかまるか」は作り手が決め、「つかまっている間どう動くか」はアクションが受け持ちます。 つかまる・離れる・蹴るの切り替えは、ヴィジュアルスクリプトの遷移条件で作ります。
つかまり中は、つかんだ壁そのものに追従します。 そのため、縦に置いたコース移動プラットフォームのような動く壁でも、ずり落ちずに一緒に運ばれます。止まっているタイルの壁にも同じようにつかまれます。
使い方
最小構成は次の流れです。
- プレイヤーのヴィジュアルスクリプトに「壁つかまり」のステートを作ります。
- 通常のステートから「壁つかまり」への遷移条件に、その他条件「壁にふれた」を置きます。
- 「壁つかまり」ステートに、その他アクション「壁につかまる」を置きます。
- 離れる・ジャンプする遷移を作ります(アクションが外れた時点でつかまりは解除されます)。
「壁にふれた(ContactWithWall)」
その他条件です。指定した側に壁があるときに成立します。壁の探し方は「壁につかまる」アクションとまったく同じなので、この条件が成立した壁は、そのままつかめます。
壁判定
- このオブジェクトからみた接触方向: 壁を探す側です(左 / 右)。初期値は両方です。どちらかで見つかれば成立します。
- 壁を探す距離: 自分の壁判定の端から、どこまで先を探すかです(ピクセル)。
対象の壁
- タイルグループ: 「すべて」「対象外」と、タイル設定で作ったグループから選びます。
- 対象となるオブジェクトグループ: 「すべて」「対象外」と、プロジェクトのオブジェクトグループから選びます。
くわしくは後述の「つかまれる壁を分ける」を参照してください。
角
- 角だけを対象にする: 有効にすると、壁が途切れている「角」でだけ成立します。崖つかまりの入口に使います。
- 角とみなす高さ: 自分の中心から、どれだけ上まで壁の上端を探すかです(ピクセル)。その高さより上まで壁が続いている場合は角として数えません。
「壁につかまる(GrabWall)」
その他アクションです。このアクションが動いている間、オブジェクトは壁につかまった状態になります。
つかまっている間の動き
- 重力が止まります。 縦の速度も打ち消されるので、ずり落ちる速さを 0 にすればその場で止まれます。
- 左右の入力では動きません。 位置はつかんだ壁に追従します。
- つかんだ瞬間に、壁面へ吸い付きます。 壁判定と画像の位置がずれている場合は、左右オフセットで見た目を合わせられます。
- ほかのステートへ遷移してこのアクションが外れると、つかまりは自動的に解除されます。 解除用のアクションを置く必要はありません。
- つかまりのステートと上下移動のステートに分けても、つかまりは切れません。 止まっている間と登り降りの間で別のアニメーションを再生したい場合は、両方のステートに「壁につかまる」を置いてください。
つかまり位置
- つかまる向き: どちら側の壁をつかむかです。
| 選択肢 | 内容 |
|---|---|
| 自動(近いほうの壁) | 左右を見て、近いほうの壁をつかみます(既定) |
| 自分の表示方向 | 向いている側の壁だけをつかみます |
| 左 / 右 | 決まった側の壁だけをつかみます |
- 壁を探す距離: 自分の壁判定の端から、どこまで先を探すかです(ピクセル)。大きくすると、壁の小さな切れ目をまたいでもつかまりが切れません。
- つかまり位置の左右オフセット: 壁面から左右にずらす量です(ピクセル)。プラスの値で壁から離れます。壁判定と画像の位置が合っていないときに使います。
- つかまり中の表示方向: 「壁の側を向く」(既定)「壁と反対を向く」「変えない」から選びます。つかみ位置へ寄る動きで向きが決まってしまわないよう、つかまっている間はこの指定を保ちます。
つかまれる壁
- タイルグループ / 対象となるオブジェクトグループ: つかまれる壁を絞り込みます。どちらも初期値は「すべて」です。
角つかまり
- 角だけを対象にする: 有効にすると、壁が途切れている「角」でだけつかまります。
- 角とみなす高さ: 自分の中心から、どれだけ上まで壁の上端を探すかです(ピクセル)。
- 角からの上下オフセット: 角からどれだけ離れてぶら下がるかです(ピクセル。プラスで下)。角を基準に位置を決めるので、どの高さで触っても毎回同じ位置につかまります。
つかまり中の動き
- ずり落ち方: 「定速」「徐々に加速」から選びます。
| 選択肢 | 内容 |
|---|---|
| 定速 | 「ずり落ちる速さ」のまま落ちます(既定) |
| 徐々に加速 | 「ずり落ちる速さ」から落ち始め、だんだん速くなります |
- ずり落ちる速さ: つかまっている間に落ちる速さです(1 秒あたりのピクセル数)。0 にするとつかまった位置を保ちます。 「徐々に加速」のときは落ち始めの速さになります。
- ずり落ちの加速度: 「徐々に加速」のときに、1 秒でどれだけ速くなるかです。
- ずり落ちの上限速度: 「徐々に加速」のときの上限です。0 にすると制限しません。
- 壁を登り降りする速さ: 上下入力で壁を登り降りする速さです(1 秒あたりのピクセル数)。0 にすると上下入力では動きません。使われるのは、そのオブジェクトの移動に割り当てた上下の入力です。
オプション
- 壁が途切れたら解除する(既定はオン): 動く足場の端などで壁が見つからなくなったときに、つかまりを自動で解除します。
- 壁から出ないようにする(既定はオフ): ずり落ちと登り降りが壁の端で止まり、壁から出ていかなくなります。
- 壁から出ない判定の上オフセット / 下オフセット: 「壁から出ないようにする」で壁を調べる位置です。自分の中心から上下にどれだけ離れた高さで見るかを指定します(ピクセル)。その高さに壁が無くなると、その向きへは進めなくなります。
- 解除時に壁の速度を引き継ぐ(既定はオン): つかまりを解除したときに、つかんでいた壁の速度を引き継ぎます(動く足場から離れたときと同じ扱いです)。オフにするとその場から落ちます。
つかまれる壁を分ける
「この壁にはつかまれるが、あの壁にはつかまれない」を作るには、壁の側にグループを設定します。
| 壁の種類 | グループの設定場所 |
|---|---|
| タイルの壁 | タイル設定の「タイルグループ」 |
| コース移動プラットフォーム / すり抜け床 | ノードの「所属するオブジェクトグループ」 |
そのうえで、条件とアクションの「タイルグループ」「対象となるオブジェクトグループ」を設定します。タイルとオブジェクトは別々に指定します。
| タイルグループ | 対象となるオブジェクトグループ | つかまれる壁 |
|---|---|---|
| すべて | すべて | すべての壁(既定) |
| すべて | 特定のグループ | すべてのタイル+そのグループのオブジェクト |
| 対象外 | 特定のグループ | そのグループのオブジェクトだけ |
| 特定のグループ | 対象外 | そのグループのタイルだけ |
| 対象外 | 対象外 | どれにもつかまれません |
条件とアクションには同じ設定を入れてください。 片方だけ絞ると「条件は成立するのにつかめない」状態になります。
壁蹴りジャンプ
壁を蹴って反対側へ飛ぶには、ジャンプ用のステートに「オブジェクトの速度を設定」を置き、座標空間を「つかんだ壁の反対方向」にします。
- プラス X が、つねに壁から離れる向きになります。左右どちらの壁でも同じ設定で飛べるため、壁ごとにステートを分ける必要はありません。
- Y はワールド座標のままです(マイナスが上)。
- 上へ 45 度に飛ぶ例: X速度の操作=設定・X=
300/ Y速度の操作=設定・Y=-300
アクションノードの「ジャンプ」チェックは使いません。 ジャンプは真上へしか飛ばないため、壁蹴りには向きません。速度を与えるだけで、重力は通常どおり効いて放物線になります。
基準にする壁は、壁から離れたあとも接地するまで覚えています。 そのため、つかまりのステートではなくジャンプ用のステートに置いて構いません。
表示方向を「移動方向」にしているオブジェクトは、蹴った方向を向いて飛びます。壁を押し込んだまま蹴っても、押している側ではなく飛んでいる方向を向きます。
ビジュアルスクリプトの組み方
最小構成(3 ステート)
- 通常(立ち・歩き・落下)のステート
- 壁つかまりのステート(「壁につかまる」を置く)
- 壁蹴りジャンプのステート(「オブジェクトの速度を設定」を置く)
遷移条件の例は次のとおりです。
- 通常 → 壁つかまり: 「壁にふれた」(落下中だけにしたい場合は、落下の条件と組み合わせます)
- 壁つかまり → 壁蹴りジャンプ: ジャンプボタンの入力
- 壁つかまり → 通常: 「壁にふれた」の反転(壁から外れた)、または接地した
- 壁蹴りジャンプ → 通常: 一定時間の経過、または接地した
つかまりと登り降りを分ける
止まっている間と登り降りの間でアニメーションを変えたい場合は、ステートを 2 つに分けます。
- 「つかまり」ステート: 「壁につかまる」(壁を登り降りする速さ=
0) - 「登り降り」ステート: 「壁につかまる」(壁を登り降りする速さ=
100など) - 上下入力で「つかまり」→「登り降り」、入力が無くなったら戻す、という遷移にします。
ステートをまたいでもつかまりは切れません。 ずり落ち方など、ステートごとに違う設定を入れても構いません。
崖つかまり
- 「崖つかまり」ステートへの遷移条件に「壁にふれた」を置き、角だけを対象にするを有効にします。角とみなす高さは、キャラクターの半分より少し大きい値から試してください。
- 同じステートに「壁につかまる」を置き、角だけを対象にするを有効にします。
- 角からの上下オフセットで、角から何ピクセル下にぶら下がるかを決めます。
- ずり落ちる速さと壁を登り降りする速さは
0にして、その場で止まるようにします。 - 登る・落ちる・飛び降りるは、別のステートへの遷移で作ります。
実用例
壁ずり落ち+壁蹴り
- 「壁つかまり」ステートのずり落ち方を「徐々に加速」、ずり落ちる速さを
20、ずり落ちの加速度を200、ずり落ちの上限速度を150にすると、張り付いてからだんだん滑り落ちます。 - ジャンプボタンで壁蹴りのステートへ遷移し、「オブジェクトの速度を設定」(つかんだ壁の反対方向・X=
250/ Y=-350)で蹴り出します。
縦に動く足場につかまって運ばれる
- コース移動プラットフォームを縦向きに置き、足場の種別を「通常の壁」にします。
- 「壁つかまり」ステートのずり落ちる速さを
0にすると、足場の上下移動にそのまま運ばれます。 - 足場の端で落としたい場合は「壁が途切れたら解除する」をオン、端で止めたい場合はオフにして「壁から出ないようにする」をオンにします。
崖にぶら下がって登る
- 「崖つかまり」ステート(角だけを対象にする・角からの上下オフセット
24など)でぶら下がります。 - 上入力で「よじ登り」ステートへ遷移し、そちらで座標移動やアニメーションで登り切る動きを作ります。
- 下入力やジャンプで「通常」ステートへ戻せば、手を離す動きになります。
つかまれる壁を限定する
- つかまれるタイルに、タイル設定でタイルグループ(例: 「つかまれる壁」)を設定します。
- 「壁にふれた」と「壁につかまる」のタイルグループをそのグループに、対象となるオブジェクトグループを「対象外」にします。
- これで、指定したタイル以外の壁にはつかまらなくなります。
注意点
- コース移動プラットフォームの「足場の種別」が「一方通行」のままだと、縦の面は壁になりません。 一方通行は下から抜けられる設定のため、横からは素通りします。縦に置いて壁として使う場合は「通常の壁」にしてください。条件のレイは一方通行を無視して当たるので、「条件は成立するのに体が止まらない」状態になります。
- ステートの「表示方向を変更しない」にチェックが入っていると、「つかまり中の表示方向」は効きません。 ステート側の指定が優先されます。
- 「壁にふれた」と「壁につかまる」のグループ設定は合わせてください。 片方だけ絞ると、条件は成立するのにつかめません。
- 角の判定は「その高さに壁があり、指定した高さまで上に壁が無い」で行います。 つかんだあとは、壁があるかどうかだけを見ます(ぶら下がると角が判定位置より上になるためです)。
- つかまっている間は移動テンプレートよりつかまりが優先されます。 移動テンプレートで動かそうとしても、つかまり側の移動が優先されます。
- つかまっている間は「足場」として記録されません。 クイックリスタートの「最後に接地した足場へ戻る」では、壁の位置には戻りません。
- 「壁につかまる」はサブレイヤーでは使えません。 移動を奪うアクションのため、サブレイヤーに置いても実行されません。
- 解除時の速度の引き継ぎは、「オブジェクトの速度を設定」で値を入れた軸には乗りません。 「設定」で蹴った場合、壁の速度は加算されず、指定した速度どおりに飛びます。足場の勢いも乗せたい場合は「加算」を使ってください。
- 壁を探す距離には、つかまり位置の左右オフセットのぶんが自動で加算されます。 壁から離して固定しても、そのせいで壁を見失うことはありません。