Unity3D中寻路Navmesh的简单介绍

在游戏中经常会需要用到寻路,Asset Store里面有很多相关插件。这里介绍U3D自带的Navmesh。

1.地形

首先新建一个Plane当地表。

然后在Plane上随意摆放些几何物体当作障碍物(注意预留能够让角色通过的路径)并给这些障碍物添加rigidbody。

将这些障碍物同地表打组(把障碍物拖到Plane下为子物体),以方便接下来操作。

选中Plane组,打开Navigation窗口,勾选Navigation Static,提示同时设置子物体,点确定。

点击Navigation面板下的Bake,会提示保存场景,确定并保存。

烘培完后如图(蓝色部分即为可以通过的路径):

如果烘培出的路径不合理,可以调整障碍物后再烘培。

将Plane及其子物体的tag设为Terrain。

2.角色

添加一个Capsule当角色。同样给它添加rigidbody组件。

新建脚本CharacterController:

 1 public class PlayerController : MonoBehaviour
 2 {
 3
 4     private NavMeshAgent agent;
 5
 6     // Use this for initialization
 7     void Start ()
 8     {
 9         agent = GetComponent<NavMeshAgent>();
10     }
11
12     // Update is called once per frame
13     void Update () {
14
15         //鼠标点击场景设置目标点
16         if (Input.GetMouseButtonDown(0))
17         {
18             Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
19             RaycastHit hit;
20             //如果点击目标点为地形
21             if (Physics.Raycast(ray,out hit))
22             {
23                 if (!hit.collider.tag.Equals("Terrain"))
24                 {
25                     return;
26                 }
27
28                 Vector3 point = hit.point;
29                 //角色转向
30                 transform.LookAt(new Vector3(point.x,transform.position.y,point.z));
31                 //设置目标点
32                 agent.SetDestination(point);
33             }
34         }
35
36         //正在行走,则输出提示
37         if (agent.remainingDistance > 0)
38         {
39             Debug.Log("seeking");
40         }
41     }
42 }

运行场景,点击目标点,看看是不是寻路成功。

时间: 2024-07-31 14:40:22

Unity3D中寻路Navmesh的简单介绍的相关文章

HTML5中的&lt;canvas&gt;画布:简单介绍(0)

<canvas> 标签是 HTML 5 中的新标签,像所有的dom对象一样它有自己本身的属性.方法和事件, 其中就有绘图的方法,js能够调用它来进行绘图 ,最近在研读<html5与css3权威指南>下面对其中最好玩的canvas的学习做下读书笔记与实 验.温馨提示:以下所有实验请使用最新版的opera,火狐. 定义: <canvas> 标签定义图形,比如图表和其他图像. <canvas> 标签只是图形容器,您必须使用脚本(javascript)来绘制图形.

【F12】chrome浏览器中 F12 功能的简单介绍

chrome浏览器中 F12 功能的简单介绍 由于F12是前端开发人员的利器,所以我自己也在不断摸索中,查看一些博客和资料后,自己总结了一下来帮助自己理解和记忆,也希望能帮到有需要的小伙伴,嘿嘿! 首先介绍Chrome开发者工具中,调试时使用最多的三个功能页面是:元素(ELements).控制台(Console).源代码(Sources),此外还有网络(Network)等. 元素(Elements):用于查看或修改HTML元素的属性.CSS属性.监听事件.断点等. 控制台(Console):控制

一.SalesForce中Schema类的简单介绍

一.Schema以及Schema NameSpace是什么 在SalesForce中Schema指的是应用程序中对象(Object)以及对象之间的各种关系.Schema NameSpace中包含了好多的类和方法,通过这些类和方法,可以访问Schema的一些基本信息. 二.Schema常用的类和方法 在Schema NameSpace中包含了很多的类以及方法,在此并不会对所有的类和方法做介绍,只会对其中几个类的几个方法做简单介绍. 1.Schema.getGlobalDescribe方法``这个方

华为eNSP中交换机命令行简单介绍

华为eNSP简单介绍1.华为交换机的命令行用户视图 <huawei> 系统视图 [huawei] <Huawei>system-view //从用户视图进入系统视图 接口视图 [Huawei]interface Ethernet 0/0/1[Huawei-Ethernet0/0/1]协议视图2.视图间的转换quit 返回上一视图return/Ctrl+Z返回用户视图3.配置交换机名称<Huawei>system-view[Huawei]sysname dqq[dqq]4

Python中的lambda的简单介绍

在学习python的过程中,lambda的语法经常出现,现在将它整理一下,以备日后查看. 1.lambda是什么? 举个例子如下: 1 func=lambda x:x+1 2 print(func(1)) 3 #2 4 print(func(2)) 5 #3 6 7 #以上lambda等同于以下函数 8 def func(x): 9 return(x+1) 可以这样认为,lambda作为一个表达式,定义了一个匿名函数,上例的代码x为入口参数,x+1为函数体.在这里lambda简化了函数定义的书写

ASP.NET中在一般处理程序中使用session的简单介绍

这篇文章介绍了ASP.NET中在一般处理程序中使用session,有需要的朋友可以参考一下 <%@ WebHandler Language="C#" Class="ChangePwd" %> using System; using System.Web; using System.Web.SessionState; public class ChangePwd : IHttpHandler, IReadOnlySessionState { public

Mac系统中各个文件夹简单介绍(转)

一.说明: Mac OS X,这是一个基于UNIX核心的系统,增强了系统的稳定性.性能以及响应能力.它能通过对称多处理技术充分发挥双处理器的优势,提供无与伦比的2D.3D和多媒体图形性能以及广泛的字体支持和集成的PDA功能.MAC OSX通过Classic环境几乎可以支持所有的MacOS9应用程序,直观的Aqua用户界面使Mac intosh的易用性又达到了一个全新的水平. 二.MAC硬盘中各个文件夹 打开Macintosh HD你会发现内中有四个文件夹,分别有——应用程序(Applicatio

标准C++中的STL容器类简单介绍

SGI -- Silicon Graphics[Computer System] Inc.硅图[计算机系统]公司. STL -- Standard Template Library 标准模板库.   容器的概念 所谓STL容器,即是将最常运用的一些数据结构(data structures)实现出来. 容器是指容纳特定类型对象的集合.依据数据在容器中排列的特性,容器可概分为序列式(sequence)和关联式(associative)两种. 迭代器是一种检查容器内元素并遍历元素的数据类型.它提供类似

OpenCV中Denoising相关函数的简单介绍

参考:http://wenhuix.github.io/research/denoise.html一.基本情况  (一)基本方法 Fast  Non-Local  MeansDenoising (FNLMD),论文为 Mahmoudi, Mona, and Guillermo Sapiro. "Fast image and video denoising via nonlocal means of similar neighborhoods." IEEE signal processi