Unityに関連する記事です

 前回の手順の続きとして、NavMeshAgent を利用した、キャラクターの移動範囲の制限機能の実装を行います。


<Game ビュー 完成動画>
動画ファイルへのリンク



手順8 −NavMeshAgent を利用した、キャラクターの移動範囲の制限機能の実装−
 ・NavMeshAgent の応用



プレイヤー用のゲームオブジェクトの移動範囲の制限を行う

1.設計と現状確認


 現在はプレイヤー用のゲームオブジェクトの移動範囲には制限はありません。
そのため、障害物となるべきゲームオブジェクトの中に出来てしまったり、ステージ外に移動出来てしまったりします。


<動画 ‐祿科に侵入できてしまう>
動画ファイルへのリンク


<動画◆.好董璽験阿飽榮阿任てしまう>
動画ファイルへのリンク


 このままですとゲームとしては成立しませんので、
障害物には侵入できないように、ステージ外には出られないようにしなければなりません。



 これらはどちらもコライダーを採用することで実現することが可能です。
ただし、今回利用している都市のアセットの各モデルにはコライダーはアタッチされていません。
そのため、プレファブで用意されているとはいえ、すべてのモデルに1つずつコライダーをセットするのは大変です。

 そういった方法ももちろんありますが、今回の場合には、前回の手順で導入した
NavMeshAgnet の機能を利用し、Bake した範囲のみをプレイヤー用のゲームオブジェクトを移動させるようにします。


2.プレイヤー用のゲームオブジェクトに NavMeshAgent コンポーネントを追加する


 ヒエラルキーにあるプレイヤー用のゲームオブジェクトを選択し、インスペクターの一番下の Add Component ボタンを押して
NavMeshAgent コンポーネントを追加します。設定値については、初期値のままで問題ありません。


<インスペクター画像>


 
参考サイト
Unity 公式マニュアル
ナビメッシュエージェント



 コライダーは利用せずに移動範囲が制限できるかを確認する意味でも、CapsuleCollider のスイッチをオフにしておいてください。
なおこのコライダーは、移動時に利用するものではありません。



 また前の手順でも説明していますが、NavMeshAgent コンポーネントと Rigidbody コンポーネントを一緒にアタッチしている場合、競合が発生します。
通常、NavMeshAgent による自動経路移動機能を利用したい場合には、Rigidbody の IsKinematic をオンに(チェックを入れる)必要があります。

 これは Physics による物理演算による処理と AI による経路の移動処理とが内部処理でぶつかり(競合し)、
結果、双方の制御が効かなくなるためとマニュアルにも解説されています。

 ただし今回 NavMeshAgent の機能は、Bake した部分内を自動移動させない(プレイヤーが手動で移動操作をする)ため、IsKinematic へのチェックは不要です。

 そのため、NavMeshAgent 内にある Speed の値や、AngularSpeed の値を変更しても、
プレイヤーの移動速度や回転する際の速度には変化がありません。これが AI によって自動移動していない証拠の1つです。
デバッグする際、実際に値を操作して試してみるといいでしょう。


<インスペクター画像(Rigidbody の IsKinematic にチェックなし)>



参考サイト
Unity公式マニュアル
NavMesh Agent を他のコンポーネントと共に使う

 
 マニュアルには目を通し、色々な機能を理解しておくことで、用意されている処理の利用パターンを増やすことが出来ます。


3.ゲームを実行して動作を確認する


 プレイヤー用のゲームオブジェクトが Bake されている青いエリア内にいることを確認した上でゲームを実行します。
もしも Bake したエリア内にいない場合には、プレイヤー用のゲームオブジェクトをエリア内へ移動させてください。


<Game ビュー 完成動画>
動画ファイルへのリンク 


 Bake がきちんとできていれば、障害物には侵入できませんし、ステージ外部に出てしまうことも防ぐことが出来ます。

 これで無事にプレイヤー用のゲームオブジェクトの移動範囲を制限することが出来ました。

 移動範囲を制限する実装を考えた時、こういった実装の方法もあるということを覚えておくと
設計を立案する際の引き出しが広がります。

 Bake された経路で移動を行い、問題がなければ、次の手順は不要ですが、一応目を通しておくとよいでしょう。


4.プレイヤーの移動範囲を調整する


 Bake したエリアは、Navigation ビューにある Bake タブにある設定値によって計算され、決定されています。

 例えば、坂道をどの位の角度なら登れるようにするのか、段差はどの位の高さなら飛び越えられるのか、
また、高さや横幅を再設定することで、天井の低い場所や細い路地のような場所に対しての Bake の状態が変わります。


Bake タブ



<参考サイト>
yttm-work 様
NavMesh作成




 Bake した状態を確認した上でゲームを実行し、プレイヤーの移動範囲の調整が必要である場合には、この Bake タブ内の設定値を変えてください

 この情報を元に Bake が行われるようになりますが、Bake タブ内の項目を変更しただけでは計算は反映されません。

 再度、右下にある Bake ボタンを押して Bake し直してください
先ほどとは経路の範囲が変わるはずです。

 Bake は何回でも出来ますので、実際にプレイヤーの移動範囲の確認しながら、侵入させてもよい位置などを見定めていってください。


<Scene ビュー>





 以上でこの手順は終了です。

 => 次は 手順9 −キャラクターのアニメーション遷移設定− です。

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Menu



技術/知識(実装例)

2Dおはじきゲーム(発展編)

2D強制横スクロールアクション(発展編)

3Dダイビングアクション(発展編)

2Dタップシューティング(拡張編)

レースゲーム(抜粋)

2D放置ゲーム(発展編)

3D脱出ゲーム(抜粋)

2Dリアルタイムストラテジー

2Dトップビューアドベンチャー(宴アセット使用)

3Dタップアクション(NavMeshAgent 使用)

2Dトップビューアクション(カエルの為に〜、ボコスカウォーズ風)

VideoPlayer イベント連動の実装例

VideoPlayer リスト内からムービー再生の実装例(発展)

AR 画像付きオブジェクト生成の実装例

AR リスト内から生成の実装例(発展)

private



このサイト内の作品はユニティちゃんライセンス条項の元に提供されています。

管理人/副管理人のみ編集できます