Unity3D 巡逻敌兵探测玩家逻辑实现

在一些射击,潜入,动作类游戏中,创关的时候总是会有敌兵守卫在某处,或者在一定范围内巡逻。这时候AI的逻辑就需要一个算法来判断何时攻击玩家或者何时发现玩家。一般的ARPG也许对此要求不高,只要玩家进入敌人的一定范围内(一个以敌人为中心的碰撞框)就开始攻击玩家。潜入类游戏还需要按照玩家发出的声音来搜索玩家。

判断士兵是否听到声音需要符合两个条件,一个是有发声源,一个是发生源到士兵的距离在士兵的听觉范围内。这里的距离不是直线距离,而是路径距离。路径距离可以利用Unity的NavMeshAgent来判断,前提是在场景中预先烘培了导航网格。

这里写图片描述

这里使用nav.CalculatePath()计算挂载脚本的gameObject和targetPosition之间的路径,然后再通过路径的corners来获取路径上的转折点,把每个点连起来就是声音传播的路径的总长度。用这里得出的总长度和士兵的听觉范围作比较(听觉范围是设定好的),如果在其听觉范围内,则士兵会去声源位置寻找玩家(注意这里只是寻找,并没有看见玩家)。

这里写图片描述

这个方法用来判断士兵是否“看”到了玩家。士兵身上加一个collider,范围就是他的可视距离,这个脚本挂在士兵身上,当有碰撞体澎湖在和士兵身上的collider接触时进行判断,如果该碰撞体是玩家,并且从士兵身上射向玩家的射线(这里可以看作是视线)没有被别的东西遮挡住,那么士兵就“看”到了玩家。

以上代码都是官网stealth示例中的。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值