ジョイタスネットジョイタスネットプログラミング情報を配信します!Unity11NavMeshAgentステージの作成1.CreateEmptyからStageを原点に作成する。2.Stageの中にCubeからFloorを作成し表面材質を設定する。●Floor3.Stageの中にCylinderを複数作成する。(複製しながら行うとよい)●Cylinder●Cylinder(1)●Cylinder(2)4.複製を繰り返し、下図のような感じにする。敵の追跡ルートとなるNavMeshを作成する。5.Stageの子要素をShiftキーを押しながらすべて選択する。Staticを選択する。7.Window->AI->Navigationを選択し、Bakeタブであることを確認し、下部のBakeボタンを押す。8.下図のように探索できるルート(濃い青の部分)が焼き込まれる。Playerの作成9.CubeからPlayerを作成し、表面材質を設定する。transformは以下。10.まずはもっとも単純に移動スクリプトを作るPlayerController1.csとして以下のように作成する。5.0f*Time.deltaTime);}}11.Playerに付与して実行してみよう。Translateでの移動は最強といっていい。あらゆるものを無視して移動する。Cylinderをすり抜ける。Enemyの作成12.それでは追跡してくる敵を作成しよう。CapsuleからEnemyを作成し表面材質を設定する。Transformは以下。14.EnemyController.csを以下のように作成して、Enemyに付与する。//毎フレーム距離の計測をする必要はないのでコルーチンで行う。//1秒間に5回距離を計測する。}}15.インスペクターからplayerを登録し、実行してみよう。プレイヤーの距離に応じて追跡を開始すれば成功だ。Playerの動き変更116.今のままではPlayerはステージ外にいっても落ちないし、Cylinderもすり抜ける。PlayerにCharacterControllerを付与する。17.PlayerController1を無効にして、PlayerController2を以下のように作成し付与する。(transform.forward*Input.GetAxis("Vertical")*Time.deltaTime*5.0f);}}18.Move関数で動かすことにより、Sylinderをすり抜けられなくなった。その他にも坂があれば45度以下は登るし、30cmの段差なら無視して進むことができる。Move関数は自分で重力を実装しないと下方向の重力はない。(ステージ外に行っても落ちない)19.さらに変更してみよう。以下のようにMoveからSimpleMoveでの移動に変更してみる。(transform.forward*Input.GetAxis("Vertical")*Time.deltaTime*120.0f);}}20.SimpleMoveでは重力が与えらる。画面外に行った時に落下する。Enemyと衝突したときに押し出されることも確認できる。スクリプトによって上方にジャンプパワーなどを与えることはできない。MoveとSimpleMoveはどちらも癖がある、どちらを使うかは吟味のしどころだ。コメントをキャンセルメールアドレスが公開されることはありません。*サイト次回のコメントで使用するためブラウザーに自分の名前、メールアドレス、サイトを保存する。Profileこのサイトを運営しているmjpurinです。「半年間で全くの初心者をエンジニアに育てる」という仕事を10年続けています。このサイトは講義で使った教材をまとめたものです。練習問題なども多数掲載しているので、同じようにプログラミングを学習し始めた人にも役立つと思います。Twitterもやってます。プログラミング学習に役立つ情報をツイートしてますのでこちらもよろしくおねがいします。