Unity3d 团结-敌人AI穿墙而过

Unity3d 团结-敌人AI穿墙而过,unity3d,artificial-intelligence,Unity3d,Artificial Intelligence,我跟踪了YouTube上的Unity视频,为你的AI创建了一个状态机,但是,当敌人巡逻时,他们会穿墙而过。我曾尝试将刚体组件添加到敌人身上,但这完全破坏了他们向每个航路点的移动 下面是使AI移动到每个航路点的代码 private void Look() { RaycastHit hit; if (Physics.Raycast(enemy.eyes.transform.position, enemy.eyes.transform.forward, out hit, enemy.s

我跟踪了YouTube上的Unity视频,为你的AI创建了一个状态机,但是,当敌人巡逻时,他们会穿墙而过。我曾尝试将刚体组件添加到敌人身上,但这完全破坏了他们向每个航路点的移动

下面是使AI移动到每个航路点的代码

private void Look()
{
    RaycastHit hit;
    if (Physics.Raycast(enemy.eyes.transform.position, enemy.eyes.transform.forward, out hit, enemy.sightRange) && hit.collider.CompareTag("Player"))
    {
        enemy.chaseTarget = hit.transform;
        InChaseState();
    }

}

void Patrol()
{
    enemy.meshRendererFlag.material.color = Color.green; //Test to see what state the enemy is in
    enemy.navMeshAgent.destination = enemy.waypoints[nextWaypoint].position; //Select the current waypoint
    enemy.navMeshAgent.Resume(); //Start walking again

    if (enemy.navMeshAgent.remainingDistance <= enemy.navMeshAgent.stoppingDistance && !enemy.navMeshAgent.pathPending) //Checking to see if we've reached our destination
    {
        nextWaypoint = (nextWaypoint + 1) % enemy.waypoints.Length; //Go to next waypoint and should loop as expected
    }
}
private void Look()
{
雷卡斯特击中;
if(物理.光线投射(敌方.眼.变换.位置,敌方.眼.变换.前进,出击,敌方.视距)&&hit.对撞机.比较标记(“玩家”))
{
敌方.chaseTarget=hit.transform;
InCaseState();
}
}
无效巡逻()
{
敌方.meshrenderFlag.material.color=color.green;//测试敌方的状态
敌方.navMeshAgent.destination=敌方.waypoints[nextWaypoint].position;//选择当前航路点
敌方.navMeshAgent.Resume();//重新开始行走

如果(敌方.navMeshAgent.remainingDistance听起来好像你的墙没有被烘焙到你的导航网格中。为了做到这一点,如果你还没有,请通过单击“窗口->导航”将导航窗口添加到编辑器中。在场景中选择你的墙,并在“对象”选项卡上的导航窗格中,选中“导航站”复选框c、 然后按导航窗格右下角的“烘焙”按钮。如果您的墙有碰撞器,您应该会看到如下内容:


蓝色区域表示允许您的导航代理行走的位置。您会注意到墙周围的区域不是蓝色的,因此您的代理将无法在那里行走。

墙可能不是从NavMesh中雕刻出来的?!墙需要一个碰撞器来实现算法。它们还需要是静态导航(可以在“静态”复选框下拉列表中设置)或NavMesh障碍物,这是我记得正确的组件。