最近一直在用navmesh实现各种功能(主要是买不起A*Pro,免费版的感觉没navmesh好用),顺便记录一下吧
我目前这个功能可以完成点击房子内部,玩家可以移动到房子里面和npc自动开关门,根据这个思路应该可以实现其他的,主要提供解决思路
注:npc进行导航的时候我是使用位置集合,让npc知道什么时候到哪里该做什么事情(类似下图)
原因如下:如果使用navmesh的话,房子的门是关着的,尽管你使用navmesh的obstacle给门设置为NavmeshObstacle动态障碍物,但是在门没有打开的时候导航路线并没有更新,所以没有这条路径可以走到房子里面,然后npc就会在使用navmesh agent的时候到达在墙外面找一个最近的点卡着
那么如何解决这个问题呢
方法1:在门的前后添加Navmesh Link,然agent知道这里又这一条路,下图中的门内外的小矩形就是navmesh link,只要给navmeshLink这个组件enable激活就可以了都不用跑到navmesh surface中进行baked
下图是组件enable = false的时候
这里已经可以实现让人物自己会进入房间了,但是如果你发现人物在经过这个区域的话速度会很快,那么可以通过代码来控制组件navmesh的enable,我在这里添加了一个触发器(下图的绿色线框就是)当npc走到这个门的时候就会触发门打开的代码
这个时候因为门添加了navmesh obstacle,那么尽管外面通过代码关闭了navmeshlink组件但是已经产生了路径这个时候npc就可以进入了
法2(简单粗暴一点):直接在门的前后添加相关位置即可
例如下图:npc想进入房子里面的睡觉位置,在门的前后添加“进入位置”和“出去位置”,然后跟前面一样,这里也是有触发器的,到“进入位置”这里的时候触发让门打开,npc就可以进去,如果没有这个“进入位置”,也就无法触发打开门,npc是可能不会走到门口的,而是在离睡觉位置距离最近的墙壁外面
npc最终效果:
记录一下,有错误直接私信和评论就行,觉得写的还可以的话点个赞OvO