zoukankan      html  css  js  c++  java
  • 自动寻路NavMesh

    步骤

      1.创建地形

      2.添加角色

      3.创建多个障碍物,尽量摆放的复杂些,用来检测NavMesh的可用性和效率

      4.选中地形,在Navigation窗口中,设置Navigation Static

      5.依次选中障碍物,在Navigation窗口中,设置Navigation Static

      6.在Navigation窗口中,选择Bake(烘焙)界面,点击Bake按钮,进行场景烘焙,就可以烘焙出寻路网格了

      7.为角色添加NavMeshAgent组件。Component->Navigation->Nav Mesh Agent

      8.为角色新增一个脚本PlayerController.cs,实现点击目标,自动寻路功能

    using UnityEngine;
    using System.Collections;
    
    public class PlayerController : MonoBehaviour {
    
        private NavMeshAgent agent;
    
        void Start () {
            // 获取组件
            agent = GetComponent<NavMeshAgent>();
        }
        
        void Update () {
            
            //鼠标左键点击
            if(Input.GetMouseButtonDown(0))
            {
                Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
                RaycastHit hit;
                if(Physics.Raycast(ray,out hit))
                {
                    //判断点击的是否地形
                    if (!hit.collider.name.Equals("Terrain"))
                        return;
    
                    //点击位置坐标
                    Vector3 point = hit.point;
    
                    //转向
                    transform.LookAt(new Vector3(point.x, transform.position.y, point.z));
    
                    //设置寻路的目标点
                    agent.SetDestination(point);
                }
            }
        }
    }

    相关知识

      1.角色身上的Nav Mesh Agent组件

        Radius半径:代理的半径(仅用于寻路目的,可以跟实际对象的半径大小不一样,一般比实际对象的半径大)

        Speed速度:代理走向它的目的地的最大移动速度

        Acceleration加速度:最大加速度

        Angular Speed角速度:最高转速(度/秒)

        Stopping distance制动距离:到目的地的距离小于这个值,代理减速

        Auto Traverse Off Mesh Link自动遍历Off Mesh链接:自动移动并关闭Off Mesh Links

        Auto Repath自动重新寻路:如果现有的部分已失效,获得新的路径

        Hight高度:代理的高度(用于调试图形)

        Base offset基本偏移:碰撞几何体相对于实际集合体垂直的偏移

        Obstacle Avoidance障碍躲避:躲避的质量水平

        Area Mash:执行代理可以遍历的导航网格层类型

      2.障碍物一定要有Mesh Renderer,用于烘焙寻路网格

  • 相关阅读:
    动态调用WCF服务
    矩阵的坐标变换(转)
    【.NET线程--进阶(一)】--线程方法详解
    [转] Location语法规则
    [转] 深入理解vue 一些底层原理
    [转] lodash常用方法
    [转] Vue 组件间通信六种方式(完整版)
    [转] vuejs组件通信精髓归纳
    [转] 浅谈移动端设备标识码:DeviceID、IMEI、IDFA、UDID和UUID
    [转] vue自定义组件中的v-model简单解释
  • 原文地址:https://www.cnblogs.com/-soy/p/5729471.html
Copyright © 2011-2022 走看看