zoukankan      html  css  js  c++  java
  • Unity3d 札记-Survival Shooting 知识点汇总--Navigation 自动寻路的运用

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

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

              NavMesh+ NavAgent

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

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

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

    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.

  • 相关阅读:
    Cognos无法解密来着内容库的用户名和密码凭证
    JavaScript 中的对象引用
    npm install出现的错误
    箭头函数中this的用法
    [译]ArcGIS Server Map Service Cache的组织结构
    [C#] 如何选择抽象基类与接口
    数据库设计规范
    在DataTable中查询应该注意的问题
    坦克大战总结
    仓库管理系统总结(1)
  • 原文地址:https://www.cnblogs.com/dongfangliu/p/5810754.html
Copyright © 2011-2022 走看看