NavMesh-pathfinding

Brackeys:

NavMesh组件与Example project:GitHub - Brackeys/NavMesh-Tutorial: Tutorial project files on using NavMesh in Unity.

目标,鼠标点击一个地方,Player将选择最短的到达该目的地

首先,Create Empty并命名为Navmesh,并添加NavMeshSurface

 

 然后点击Bake ,那些蓝绿色的地方就是可以行走的地方

 NavMeshSurface

 NavMesh Surface组件表示特定NavMeshAgent类型的可以行走区域,并定义场景中应构建NavMesh的部分。

Agent Type:使用NavMesh Surface的NavMesh agent的类型。用于Bake设置,并在寻路期间将NavMeshAgent与正确的Surface匹配。

可以在Agent Type中场景自己想要的类型

并设置Name(名称),Radius(该代理的半径大小),Height(该代理的高度),Step Height(每行走一步的距离),Max Slope(最大斜率,爬坡能力)

 

再次在NavSurface中Agent Type设置自己的Agent Type会有不一样的行走路径 

 

 Collect Objects:定义用于烘培的游戏对象。

Include Layers:定义Bake中包含的对象层。

Use Geometry:选择要用于Bake的几何图形;

--Render Meshed(渲染网格):使用渲染网格和地形中的几何体

--Physisc Collider(物理碰撞器):使用碰撞器和地形中的几何体。与渲染网格选项相比,使用此选项的代理可以更加靠近物理环境的边缘。

绿色的圆柱体是我们的玩家Player,可以看到Player也被当成场景中的一部分给Bake了。但是我们不希望Player被Bake。

我们可以改变Player的层使其不被Bake

创建一个Player层,并将它赋值给Player 

然后在NavMesh的include Layers中的Player层取消掉。

再次点击Bake,我们可以看到,Player已经没有被Bake了 

在上图中我们可以看到墙里面还是被允许走动的,但是我们并不希望它被允许走在里面。

所以给Walls去添加NavMesh Modifier组件去修改 Walls

NavMesh Modifier:

NavMesh Modifier调整特点游戏对象在NavMesh期间的行为 

NavMesh Modifier按层次影响游戏对象,这意味着组件所吸附着的游戏对象及其所有子对象都会受到影响。此外,如果在变化层次的更下方发现另一个NavMeshModifier,则下面的NavMeshModifier则会覆盖层次的上方的NavMeshModifer

Ignore Form Bulid:选择此复选框可以将游戏对象的所有子对象从BuildProcess中排除

Override Area Type:选择此复选框可以更改包含修改器及其所有子对象的GameObject的区域类型

Area Type:下拉菜单中选择要应用的新面积类型

Affected Agents:Modifier影响的agent选择。例如,可以选择从特点代理在排除某障碍

 并且给Player添加NavMeshAgent组件 

NavMeshAgent:该组件连接到游戏中的移动角色,以允许其使用NavMesh的导航场景

接下来我们需要编写代码让Player自动寻找最短路径到达目的地

 

值得特别注意的是,需要给Ground添加Box Collider组件,因为射线的投射需要碰撞器才能撞击地面

 

摄像机获取射线:

Ray:

 Ray:射线是一条从原点开始并沿某个方向沿某个方向延伸的无限线。

RaycastHit:

Description:用于从射线投射中获取信息的结构

 RayCastHit.Point:世界空间中射线碰撞碰撞器的碰撞点

 ScreenPointToRay()函数的实现原理:

 返回从摄像机穿过屏幕点的射线。生成的射线在世界空间中,从相机的近屏幕上的位置(x,y)像素坐标(忽略z轴)。

Unity 中的 ScreenPointToRay 方法:https://blog.lujun.co/2019/08/14/unity_camera_screen_point_to_ray/

Physics.Raycast:

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值