今天遇到一个问题,就是如何处理一些动态的障碍物。
NavMesh
是可以躲避静态的障碍物,
NavMesh
Obstacle的作用就是动态增加障碍。但是有个问题,
NavMesh
Obstacle是圆,连椭圆都
不
行,所以,只好写一个附属脚本,用圆拼成矩形,就可以了。
using
Unity
Engine;
using System.Collections;
public class
NavMesh
Obsta
Unity
3D提供的
NavMesh
系统可以方便的解决游戏的寻路问题,但是该系统有一个比较让人
不
理解的问题:
NavMesh
导航时会忽略Physics系统本身的
碰撞
,也就是说
NavMeshAgent
在移动的过程中
不
会被Collider
阻挡
,而是会直接走过去(但是OnTriggerEnter等触发功能正常)。
动态
碰撞
的功能对很多游戏都是一个基本的需求,而根据
NavMesh
提供的接口,...
Unity
使用导航 生成网格之后,用
NavMeshAgent
控制AI追逐玩家,因为玩家控制的角色处于网格范围之内,在AI移动的过程中玩家可以无视
碰撞
穿过AI。
这个问题有很多解决方法,比如禁用掉
NavMeshAgent
的控制,只提供运动的方向和速度,改用脚本控制AI的移动。也可一用插件动态烘培网格。但是就是想偷懒嘛,所以用了个简单的方法解决的此问题。
因为发现拥有
NavMesh
...
自带寻路
Navmesh
的三大组件:
1.Nav Mesh
Agent
:主要挂在寻路物体上
2.Off Mesh Link:实现区域转移功能(例如,有时
不
一定只是在地面上进行寻路,可能有些高高的平台,平台与地面是
不
相连的,使用该组件可以跳到平台上)
3.Nav Mesh Obstacle:主要挂在障
我们在用
NavmeshAgent
的时候,比较复杂的场景Bake之后的可走范围可能分布会
不
均匀,就是说有些地方是
不
允许走的。例如下面的图。
我们让NPC移动的时候需要生成一个随机点,让NPC走过去,但是假如我们随机生成的点在
不
可走的地方咋办,此时
Unity
的
NavmeshAgent
有个API:SamplePosition(…)
这个函数大概意思就是把当前点替换为最近的
NavmeshAgent
可以走到的点,这样随机生成的点就
不
会出问题了。
但是还有一个问题,假设生成的点在中间这个区域怎么办?
虽然这个区
昨天发布了Navesh
agent
与飞行,有朋友说关键是差值,所以今天就将差值也加了进去。昨天的版本墙太高的话(大于了角色飞行高度),角色就会飞
不
过去,而穿进了墙中。
今天修改后的效果看图:
先说一下实现的原理:就是在飞行角色的下面加两个子Point,一直发射射线来作为角色的眼睛。
下面是控制角色的代码:
using System.Collections;
using S
基于
unity
3d 2019.4.13
NavMeshAgent
的寻路由acceleration和speed两个值决定,寻路过程中的速度为velocity。调用isStop=True并
不
能立马打断移动,会根据acceleration来逐步减速,想要立刻停止,需要:
navmeshAgent
.isStopped = True;
navmeshAgent
.velocity = Vector3.zeor;
考虑
碰撞
的情况下控制人物的行走在考虑
碰撞
的情况下,控制人物在场景中移动一般有两种方法,一种是利用刚体Rigidbody,然后通过施加力或者改变速度来控制人物的移动,另外一种方法就是利用
unity
自带的character controller来方便的调用函数直接控制行走。
由于character controller内部好像自带类似于刚体的属性,所以使用这个组件的话就
不
需要添加刚体了。当然胶囊体
碰撞