Unity3d 札记-Survival Shooting 知识点汇总--Navigation 自动寻路的运用

点击 Windows--Navigation,Navigaition 面板才会出现

 

实现自动寻路或者导航,在Unity中并不复杂,不需要自己写算法,只需要做以下两件事。

          NavMesh+ NavAgent

1.选中需要导航的地图或者环境,生成(Bake)一个导航网格(NavMesh)

按图示顺序点击1,设置好 橙色框内相关属性,然后点击 2  ,最后 生成 3 可以在Scene中直接看到。

 

 

2\NavMeshAgent 设置,也就是寻路对象 的相关设置。

NavMeshAgent 其实就是一个套子,这个套子可以被 NavMesh所识别,最终来实现导航的目的。

所以, 在对应的GameObject上,进行如图所示的设置。

 添加一个NavMeshAgent 组件

 

 

3\代码实现

using UnityEngine;
using System.Collections;

public class EnemyMovement : MonoBehaviour
{
    Transform player;
    PlayerHealth playerHealth;
    EnemyHealth enemyHealth;
    NavMeshAgent nav;


    void Awake ()
    {
        player = GameObject.FindGameObjectWithTag ("Player").transform;
        playerHealth = player.GetComponent <PlayerHealth> ();
        enemyHealth = GetComponent <EnemyHealth> ();
        nav = GetComponent <NavMeshAgent> ();
    }


    void Update ()
    {
      //  if(enemyHealth.currentHealth > 0 && playerHealth.currentHealth > 0)
    //    {
           nav.SetDestination (player.position);
       // }
      //  else
       // {
       //     nav.enabled = false;
       // }
   }
}

关键的就三行代码

    Transform player;

 NavMeshAgent nav;

1.player = GameObject.FindGameObjectWithTag ("Player").transform;

2.nav = GetComponent<NavMeshAgent>();

3.nav.SetDestination (player.position);

 

值得学习的是对于Tag的利用,

实际游戏过程中,怪物是实时生成的,所以我们不能到时候,再通过public属性给它一个Player的引用。

用Tag来处理问题,则显得非常高明。

 

 

[小知识 ] Vector3.normalized,空间向量,方向不变,长度归1.

posted @ 2016-08-26 16:05  dongdongdongdong  阅读(433)  评论(0编辑  收藏  举报