Navigationを使えば簡単にできるらしい。
1. 床や壁などをcommandを押しながら複数選択する。
2. インスペクターの右上にある「Static」と表示してあるラベルの右側の「▼」を押して、「Navigation Static」を選択する。
※この際、子を含んでいるゲームオブジェクトを選択していた場合、「Change Static Flags」というダイアログが表示される。
子にも「Navigation Static」を適用する場合は「Yes, change children」を選択する。
2. インスペクターの右上にある「Static」と表示してあるラベルの右側の「▼」を押して、「Navigation Static」を選択する。
※この際、子を含んでいるゲームオブジェクトを選択していた場合、「Change Static Flags」というダイアログが表示される。
子にも「Navigation Static」を適用する場合は「Yes, change children」を選択する。
Navigationビューの右下の「Bake」ボタンをクリックして、NavMeshを作成する。
Navigationビューを開いている状態でSceneビューを見ると、移動できる範囲が薄い水色で覆われている。
作成したNavMeshは、シーンファイルがある場所に、シーン名フォルダが作成され、その中に「NavMesh.asset」という名前でファイルとして保存されている。
Navigationビューを開いている状態でSceneビューを見ると、移動できる範囲が薄い水色で覆われている。
作成したNavMeshは、シーンファイルがある場所に、シーン名フォルダが作成され、その中に「NavMesh.asset」という名前でファイルとして保存されている。
NavMeshの作成に使用されるのは、Navigation Staticが設定されているゲームオブジェクトだけが対象。
また、「Bake」ボタンをクリックした時の状態が保存されている。
よって、壁などのゲームオブジェクトを新しく追加したり移動したりした場合は、再度「Bake」ボタンをクリックしてNavMeshを更新する必要がある。
また、「Bake」ボタンをクリックした時の状態が保存されている。
よって、壁などのゲームオブジェクトを新しく追加したり移動したりした場合は、再度「Bake」ボタンをクリックしてNavMeshを更新する必要がある。
移動できる範囲を表したのがNavMesh。
そのNavMeshに沿って移動するためのコンポーネントがNavMeshAgent。
NavMesh上を動かしたいゲームオブジェクトに対して、NavMeshAgentコンポーネントを追加する。
ゲームオブジェクトを選択 -> Component -> Navigation -> Nav Mesh Agent
そのNavMeshに沿って移動するためのコンポーネントがNavMeshAgent。
NavMesh上を動かしたいゲームオブジェクトに対して、NavMeshAgentコンポーネントを追加する。
ゲームオブジェクトを選択 -> Component -> Navigation -> Nav Mesh Agent
public class Enemy : MonoBehaviour { // targetには、Unity画面から追いかけたい対象のゲームオブジェクトを設定する public GameObject target; NavMeshAgent agent; Animator animator; void Start () { agent = GetComponent<NavMeshAgent> (); animator = GetComponentInChildren<Animator> (); } void Update () { // NavmeshAgentのdestinationに位置を設定すれば、自動的にその位置に向かって移動するようになる。 agent.destination = target.transform.position; animator.SetFloat ("Speed", agent.velocity.magnitude); } }
コメントをかく