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.