TIPS: タイル効果のエリア変数(Area Value)を使ったアイデア - すり抜けられる足場/はしご

ACTION GAME MAKERのタイル効果のエリア変数(Area Value)とは、触れたオブジェクトの変数、現在のエリアID(stayed_area_id)を自動で更新してくれる機能です。

つまり、事前にタイル側で指定をしていることで、今触れている(もしくは重なっている)タイルのIDがいくつなのか?ということをオブジェクトが把握することができます。

タイル効果についてはこちら:

マニュアルに記載がある通り、効果を受けたいオブジェクトのGameObjectでタイル効果の有効化、タイル効果側で対象グループの指定が必須なのでご注意ください。

すり抜けられる足場のアイデア

特定のエリア変数の場合、下キーを押すと一時的にコリジョンが無効になる、という処理を作れば、特定の足場タイルのみすり抜けるということが可能になります。

タイル側の設定

  1. 足場として利用したいタイルを用意します。
  2. 判定を接触、グループを指定します。
  3. 足場のエリア変数を有効化し、任意の値を設定します。
  4. (オプション)Physics>Physics Layer>Polygonにある一方通行(OneWay)を有効にし、方向を上とすると、下から上へはすり抜けられるという設定にできます。
  5. タイルの設定は以上で、上から下へのすり抜けはオブジェクト側で設定します。

オブジェクト側の設定

  1. 設定したいオブジェクトのヴィジュアルスクリプトを開きます。
  2. すり抜け用の新しいステートを作ります。
  3. 待機モーションから新ステートへの遷移条件は、自身の変数Area_idが指定の値のときAND下方向の入力がされたとき。とします。
  4. 新ステートでは、3つのアクションを設定します。自身のプロパティを変更で
    ①壁判定(CollisionShape2D)の無効(Disabled)プロパティを有効化
    ②0.3秒ウェイトを入れる。
    ③壁判定(CollisionShape2D)の無効(Disabled)プロパティを無効化
    とします、これにより0.3秒間壁判定が消えるため、重力に従って足場をすり抜けて落下します。
  5. 新ステートからは、0.3秒の時間経過で落下モーション用アクションに遷移するようにします。

これらの設定により、特定の足場タイルに乗っている場合のみ、下キー入力ですり抜けるが実装できます。

  • すり抜けがひっかかる場合はウェイトの長さを調整して長くしてみましょう。
  • すり抜け用モーションを作る場合、アニメーションプレイヤーのキーで壁判定の無効化/有効化処理を行う事もできます。その場合は、有効化が終わらないうちに遷移しないように注意しましょう。

はしごのアイデア

概ね、足場と同じアイデアになります。
特定のエリア変数の場合、上キーを押せば重力が無効になりキャラクターが登る、という設定をすることで実現できます。

タイル側の設定

  1. はしごとして利用したいタイルを用意します。
  2. 判定を接触とし、グループを指定します。
  3. 足場のエリア変数を有効化し、任意の値を設定します。

オブジェクト側の設定

  1. 設定したいオブジェクトのヴィジュアルスクリプトを開きます。
  2. はしご登り用の新しいステートを作ります。
  3. 待機モーションから新ステートへの遷移条件は、自身の変数Area_idが指定の値のときAND上方向の入力がされた瞬間。とします。
  4. 新ステートでは、重力を無効にしておきます。その上で、アクション「指定方向に移動」で上方向(270度方向)へ移動するように指定しましょう。
  5. 新ステートからは、自身の変数Area_idが指定の値以外(!=)のときOR 入力がない場合、としましょう。

これらの設定により、上方向キーを押している間は登り、入力をやめる、もしくは頂点に達しArea_idが別の値になった際には上昇がとまります。

  • 新ステートへの遷移条件を上方向の入力がされている間とすると離すまで無限に上昇してしまいます。
  • はしごの頂点には、一方通行設定をしたタイルを置くか、Collisionshape2Dを別途設置しておけば登りきったあとに自然に立つことができます。
  • はしごの途中で止まりたい場合は、重力を無効にした停止用のステートを用意して新ステートからつなぐとよいでしょう。上キーで再開する場合は新ステートに戻し、キャンセルすればFallに遷移するようにすればより自然な動作になります。
1 Like