You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

游戏AI求助:如何避免蛇跨管道追踪老鼠并检测前方障碍

解决蛇跨管道错误追踪老鼠的问题

你的核心问题是只通过点积判断了老鼠的方位范围,但没验证蛇和老鼠之间是否有管道墙体遮挡,导致不同管道的老鼠也会被判定为可追踪目标。直接用Unity的射线检测就能解决这个问题,具体修改如下:

关键思路

先保留你原本的点积逻辑(确保老鼠在蛇的前方合理范围内),再增加射线/球形射线检测,确认蛇到老鼠的直线路径上没有管道墙体,只有满足这两个条件时,才让蛇追踪老鼠。

修改后的代码

首先给你的管道墙体设置一个专属Layer(比如命名为PipeWall),然后替换原有代码:

Vector3 distance = player.position - transform.position;
float dot = Vector3.Dot(distance.normalized, transform.forward);
// 先判断老鼠是否在蛇的前方扇形区域(dot>0.8对应约36度视野,可根据需求调整)
bool isInFront = dot > 0.8f && distance.magnitude < 5f && distance.magnitude > 3f;

if (isInFront)
{
    // 只检测管道墙体的LayerMask
    int pipeWallLayer = LayerMask.GetMask("PipeWall");
    // 射线起点稍微抬高,避免误触地面
    Ray ray = new Ray(transform.position + Vector3.up * 0.5f, distance.normalized);
    RaycastHit hit;

    // 射线未命中管道墙体时,才判定老鼠在可追踪范围内
    if (!Physics.Raycast(ray, out hit, distance.magnitude, pipeWallLayer))
    {
        agent.destination = player.position;
    }
    else
    {
        agent.destination = goals[0].transform.position;
    }
}
else
{
    agent.destination = goals[0].transform.position;
}

额外优化建议

  • 如果蛇有一定体积,用Physics.SphereCast代替Raycast,避免蛇身穿过细小墙体导致误判
  • 调整dot>0.8f的数值可扩大/缩小蛇的视野范围,数值越接近1,视野越窄
  • 射线起点的Vector3.up*0.5f可根据蛇的模型高度灵活调整

内容的提问来源于stack exchange,提问作者Davide

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 03:21:02