【GDevelop 基礎 9】方向転換 / ずっと逃げる

今回作成するもの

前回の 【GDevelop 基礎 08】ずっと追いかける (他のオブジェクトとの関連を作る) - Make Everything Games では、追ってくるキャラクターは方向が変わっても後ろ向きのままで移動しました。

よって、今回は追ってくる方向に応じて左右に Flip するように変更します。

それに加えて、追ってくるキャラクターとほぼ同じ作り方で「ずっと逃げる」キャラクターを作成します。

Forever_Chase Behavior の Chase Target Function 変更

まずは、追ってくるキャラクターを追ってくる方向に応じて左右にスプライトを Flip (反転) させます。

追加した条件式で The X Position of Target > Object.X() を使っています。これは設定画面では以下のようなものです。

Target は追跡対象、Object は Behaviour が付いているキャラクター、つまり追跡者自身です。

よって、この式は「追跡対象の X 座標が追跡者の X 座標より大きい」と解釈できます。そして、この場合はスプライト画像を反転しません。

逆にもう一つの条件式である The X Position of Target < Object.X() は、「追跡対象の X 座標が追跡者の X 座標より小さい」つまり、追跡対象が左、追跡者が右のポジションに入れ替わるため、スプライト画像を反転します。

ここでは、追跡対象 (Target) と追跡者 (Object) の位置関係 でスプライト画像を反転させるかを決めていることを留意してください。実はここでは、追跡者が実際にどっち方向に進んでいるかは関係ありません。

Forever_Escape Behavior を作成

どの Extension にいれるかは自由です。今回は Forever_Chase と同じ Extension に入れました。

EscapeFromTargetFunctionAction で作成しています。

Behavior properties の追加

Forever_Chase の時と同じく、Speed のみです。逃走スピードに使います。

EscapeFromTarget の実装

Parameters

追加したのは #2Target だけです。逃走する対象(その対象から離れようとする)を指定します。

Configuration

パラメータを追加したので、Configuration も編集します。

Events

まず、1行目の Move Object toward Target with an instant force of -Speed に関してです。
これは、Forever_Chase の実装に対して Speed-Speed としただけです。つまり「対象に対して向かう力を加え続けるのが追跡、対象に対して離れる方向に力を加え続けるのが逃走」ということです。

対象との比較ではなく、自分に力が加わる方向に反転する

改めてスプライト画像の反転、つまり Flip している箇所を抜き出します。

先ほどの Forever_Chase の方では、「Target との X 座標の位置関係」から反転するかどうかを判定していました。

しかし今回は逃走なので、単純にこのキャラクターが逃走する方向に向けるようにしています。(実際には Target との位置関係で方向が変わるので、見た目の動きは変わりません)

反転するタイミングの判定方法をもう一つ

上記は EscapeFromTarget の Events のもう一つの実装例です。

ここでは反転するための判定のために「自身の直前の X 座標 (PreviousXPosition)」を保持しています。Behavior property としては以下のようになります。

4つ目のイベント「(Invert) The property value for the PreviousXPosition of Object = Object.X()」の条件は、「自身の直前の X 座標と、現在の X 座標が等しくなければ」ということです。
つまり、少しでも移動していれば、 PreviousXPosition を更新しています。

そして、2つ目、3つ目のイベントが「どちらの方向に移動しているか」の判定になります。それに応じて、Flip するかどうかを決定しています。

紹介はしましたが、今回は Force を使って移動させているので、前述の Object.ForceX() を使うので必要十分ではないかと思います。

他にもいい方法があるのではないかと調べていたのですが、たどり着かずで、今回はこれらの方法としました。

各種設定 & 動作確認

シーンの設定

【GDevelop 基礎 08】ずっと追いかける (他のオブジェクトとの関連を作る) - Make Everything Games に加えて Excaper を加えています。Player, Chaser に関しては、これ以降の設定も特に前回からの変更はありません。

Escaper の設定

Foreve_Escape を追加しているだけです。冒頭のGIF を撮影するために Speed はかなり遅くしています。

イベントシートの設定

前回に加えて Escaper の設定を追加しているだけです。

動作確認

後は、シーン上に Escaper を追加で配置し Preview を開始すれば冒頭のGIF 画像のように、動く Player に対して Escaper が逃げていくという状態になります。
Chaser に関しても、Player との位置関係でスプライト画像が反転するのが確認できると思います。(冒頭の GIF はもう一つの反転タイミング判定方法のテストもしているので、もう一体 Escaper がいます)