読者です 読者をやめる 読者になる 読者になる

Redhuのゲーム開発Fragments

UnityやUEでゲームを作る際に学んだことを、これからなにか作りたい人に向けて。あるいは復習する自分に向けて記す。

UnityのNavMeshを使用した敵移動

Entyの支援者リワードで、「敵MAの構成権」をつけたので、敵MAを動作させるAIを作る必要が出てきました。出てきましたというか、もともとやるつもりだけど背水の陣を敷いたので取り組む理由が生まれたというか。

 

最低限、敵のAIに必要な要素として、「敵は移動しなければならない」があります。いや当然ですよね。

ではどのように移動させるのか、今回はUnityのNavMeshを使ってみました。

 

f:id:redhu:20160514012212p:plain

 

NavMeshとは、上図のように設定されたAIが移動できるエリアのことです。

NavMeshで移動可能エリアに設定するオブジェクトはNavigationStaticである必要があります。インスペクターの右上あたりからチェックを入れておきましょう。

WindowからNavigationタブを表示し、NavMeshを焼くオブジェクトを選択してBakeすれば設定完了。

焼き終わりまでちょっと時間かかります。多分オブジェクトが大きさや複雑さが増すほど時間も。

 

さてこれで、AIが移動できるエリアが決定されました。

 

次にこのNavMeshを使って実際に動く機能をつけます。

動かしたいオブジェクトに、コンポーネント追加からNavMeshAgentを追加しましょう。

 

f:id:redhu:20160514012843p:plain

 

Agent Sizeは要するに当たり判定というか移動可能判定用のサイズ。

Steeringの項目が、速度、旋回性能、加速性能、目標地点までどれくらい近づいたら停止するか。到着時に勢いで行き過ぎないようにブレーキかけてストップさせるか。

あとは障害物の回避判定力とか。

 

あとはスクリプトからこのNavMeshAgentコンポーネント

.destination

に目標地点のPositionを入れれば経路検索して移動してくれます。

 

自分の意志を離れて何かが動き出すのってすごい気持ちいい。

 

ただし目標地点がNavMeshから離れすぎてしまうと経路を見失ってしまう模様。最後に見失った地点まで進んで立ち止まります。

NavMeshAgentのついたオブジェクトはNavMesh上に居なければエラーを吐くので、nullチェックでセーフティーかけとかなければいけません。

それにあくまで設定したオブジェクトが目標地点まで移動してくれるだけなので、機体のアニメーションと連動させるとかにはいろいろと小細工をしました。

ひとまずまあ、こういうかたちでAIを作って行きます。

Entyに登録しました

クリエイター支援サイトEntyに登録しました。

www.enty.jp

MachineCladの制作に関しての支援を募っています。

 

Entyはクリエイターの制作そのものへの支援をするという感じのパトロンサイトです。

MachinCladの、ひいてはレデュの制作を支援したいという方ぜひぜひご支援よろしくお願いいたします。

 

さて、Entyにアップした記事の動画にもありますが、いろいろ更新しています。

というかあれですね、こっち側では機体デザインの変更から動くようになるまで進捗アップしてませんでしたね・・・

まず旧作にも出ていたセイレーンがボスキャラとしてちょっとデザインに手を加えて復活。主人公勢の技術レベルとは全く違う、エネルギー系攻撃で攻めてきます。

熱量蓄積値を持つ攻撃のため、受けすぎるとオーバーヒートからの固定ダメージを受けてしまいます。

まだまだモーションは少ないですが徐々に増やしていきます。

自機にはマテリアルカラーの変更機能を。各パーツ4マテリアル(ライトがあるパーツは5マテリアル)で構成されておりそのカラーを変更できます。

 

今後のToDoとしては

・スタート画面

・カスタマイズ機能

・敵AI

などなど山積みです

うに部屋さんに置かせて頂いているリメイク対象の旧作

unityroom.com