目標を追いかけるオブジェクト

記事作成 2019年7月
PlayMaker 1.9.0 / Unity 2018.2.6f1

このように自機(目標)を追いかける敵のような動きを作ります。
「十字キーでキャラクターを操作する」 の操作キャラ(Capsule)を登場させています。

----------------------------------------------

フィールドは Plane の上に Cylinder を少し伸ばしただけの柱を、四隅に置いたものです。

----------------------------------------------
後の流れのために、この柱4本に目印となる Tag を付けておいてください。

わかりやすければ、何でもよいです。

----------------------------------------------
追跡する敵となるCubeは基本形そのままの状態に インスペクタでコンポーネント
Rigidbody を付けFreeze Rotation をチェックしておきます。

----------------------------------------------
Cubeに状態遷移を付け、はじめのノード、アクションをこのように。
[Move Towards] はTarget に設定したオブジェクトへ向かって移動するアクションです。
[Smooth Look At] はTarget に設定したオブジェクトの方を常に向くように作用します。
Capsuleは操作キャラです。

これだけで、はじめの動画のように目標オブジェクトを追いかけ続けます。

----------------------------------------------
----------------------------------------------
そして、ちょっと一工夫。敵の動きにランダムさを加えてみます。
Cube のはじめのノードに
[Random Wait] を追加します。これは、最小、最大に設定した数値内からランダムに
値を決め、その時間分待ち、その後 Finish Event で設定したイベントへ遷移します。


----------------------------------------------
 遷移先の「状態」に、名前のまんまの機能を設定します。
[Get Random Object] で、シーン内から、選んだ Tag がついたオブジェクトをランダムに
選択して変数に格納します。
図では [t 柱] の付いたオブジェクトを ゲームオブジェクト変数の[gobj 選択した柱]に
入れています。当然変数は作っておきます。

[Move Towards] [Smooth Look At] は はじめの状態と同じです。コピーでよいでしょう。
Target はオブジェクトを格納した変数にします。

----------------------------------------------
これで、4隅の柱からランダムに1本を選んで、移動していくのですが
さらに、同じように[Random Wait] も加え、適当な時間でプレイヤー追跡に戻る
ようにします。

----------------------------------------------
再生するとこのような感じに。ときおり思い出したように
柱の方に向かっていきますね。

----------------------------------------------
カメラの動き で作った「手前に一定距離を保って追随する動き」
のノードをカメラに付けてみると、こんな映像ができました。


@今回のノード、アクションでは、自機を追っては来ても、間に壁などの障害物があった
場合、それを回避して追跡する、ということまではできません。

それには、いわゆる経路検索(パスファインディング)を使います。PlayMakerでは
パスファインディングもガッツリ使えます。ページを改めて記しましょう。

記事 経路検索_パスファインディング

0 件のコメント:

コメントを投稿