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

    • 实例

    我们要实现一个功能:点击场景中的一个位置,角色可以自动寻路过去。角色会绕过各种复杂的障碍,找到一条理论上”最短路径“。

    • 步骤

    1.创建地形
    2.添加角色
    3.创建多个障碍物,尽量摆的复杂一点,来检查Navmesh的可用性和效率。
    4.选中地形,在Navigation窗口中,设置Navigation Static

    5.依次选中障碍物,在avigation窗口中,设置Navigation Static
    7.Navigation窗口中,选择Bake(烘焙)界面,点击Bake按钮,进程场景烘焙,就可以烘焙出寻路网格了
    8.为角色添加NavMeshAgent组件。Component->Navigation->Nav Mesh Agent
    9.为角色新增一个脚本PlayerController.cs,实现点击目标,自动寻路功能

    using UnityEngine;  
    using System.Collections;  
      
    //Author:ken@iamcoding.com  
    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);  
                }  
            }  
      
      
            //播放动画,判断是否到达了目的地,播放空闲或者跑步动画  
            if (agent.remainingDistance == 0)  
            {  
                animation.Play("idle");  
            }  
            else  
            {  
                animation.Play("run");  
            }  
              
        }  
    }  
    • 相关知识
    • 1.角色身上的Nav Mesh Agent 组件
    1. Radius 半径: 代理的半径(仅用于寻路目的,可以跟实际对象的半径大小不一样,一般比实际对象的半径大)。
      Speed 速度: 代理可以周游世界,走向它的目的地的最大移动速度。
      Acceleration 加速度: 最大加速度。
      Angular Speed 角速度: 最高转速(度/秒)。
      Stopping distance 制动距离:制动距离。到目的地的距离小于这个值,代理减速。
      Auto Traverse OffMesh Link 自动遍历OffMesh链接:自动移动并关闭OffMeshLinks
      Auto Repath 自动重新寻路:如果现有的部分已失效,获得新的路径。
      Height 高度:代理的高度(用于调试图形)。
      Base offset 基本偏移:碰撞几何体相对于实际几何体垂直的偏移。
      Obstacle Avoidance Type 障碍躲避类型 :躲避的质量水平。
      NavMesh Walkable 导航网格行走:指定代理可以遍历的导航网格层类型。这个参数很有用,在接下来的实例中可以用到。
    2. 障碍物一定要有Mesh Render,用于烘焙寻路网格
  • 相关阅读:
    面向对象(静态)
    面向对象 三大特性
    MySQL数据库表分区功能详解
    zabbix 库表介绍
    数据库分库分表思路
    Mysql之binlog日志说明及利用binlog日志恢复数据操作记录
    zabbix 监控 tomcat
    zabbix 监控项报"Value "(No info could be read for "-p": geteuid()=1002 but you should be root"
    Linux中Swap与Memory内存简单介绍
    mysql常用命令杂记
  • 原文地址:https://www.cnblogs.com/lichuangblog/p/6492692.html
Copyright © 2011-2022 走看看