yumeの日記: Unity制作 メデューサ・ゲーム #7
●メデューサ移動システム
現状はマウスクリックしたポイントに向かってvelocityを決めて、フレームごとに徐々にそこに近づいていく、という方式だが
少し変えて「マウスをクリックしている間、マウスカーソルへ向かう」という方式にする
private void MoveTowardAim()
{
towardPosition = aimPosition - myBody.position;
towardPosition = towardPosition.normalized;
myBody.velocity = towardPosition * speed;
}
●捕獲システム
兵士がメデューサを捕捉し、近づいて、捕獲するまでの動作。
兵士とメデューサをつなぐ線が、壁でさえぎられないとき:
・兵士はメデューサを「発見」した状態になる。
兵士は発見状態の時:
・メデューサへの経路を取得し、そこへ向かう。
兵士がメデューサに触れたとき:
・メデューサの動きを止める、移動不可能状態にする
・1秒数える
・ゲームオーバー処理
ただし:
・1秒数え終わるまでに石化してしまった場合は中断
だいたいの部分は簡単にできたが、問題は経路探索だ。
A*アルゴリズムだとかなんとかいろいろあるらしいというのは知っているが……。
arongranberg.comにUnity向けのA*経路探索アセットがある。
有料だが、無料で試せるバージョンもあるらしい。2D経路探索の動画解説もあるのでこれを一旦試してみよう。
かなりややこしいが、読んだ感じ:
・指定のサイズ(ex. 40*24)平面グリッドを作っておく。
・シーンのコライダーなどをもとに、平面グリッドを「通行不可領域」と「通行可能領域」に分ける。
・このアセットのAIコンポーネントをアタッチすると、指定したターゲット探索メソッドに基づいて、ターゲットを選んでそこへ移動する。
ということを大雑把にやればいいようだ。既存のwallは先にLineRendererで線だけを設計し、ゲーム実行時にそこからメッシュとコライダーを生成するという形だったが、これだとちょっとやりづらいので、「PolygonCollider2Dからメッシュをエディタ上でリアルタイムに生成」するやつを入れた。
仮のキャラクターにAIを入れて、サンプルのターゲットへ向かうスクリプトで試す。
そうするとこう。いい感じだ。
Unity制作 メデューサ・ゲーム #7 More ログイン