2016-10-12 208 views
1

我跟随了YouTube上的Unity视频来为AI创建一个状态机,但是当敌人巡逻时,他们穿过墙壁。我试图将RigidBody组件添加到敌人身上,但是这完全阻碍了他们移动到每个路点的动作。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 
    } 
} 

任何人都知道如何修改这个代码,以使敌人走动墙壁地图到达每个航点的代码?谢谢。

+0

墙壁可能不会被雕刻出NavMesh?!墙壁需要一个碰撞器来实现算法。他们还需要导航静态(可以在静态复选框下拉菜单中设置)或导航障碍物,当我没有记错的时候这是一个组件。 – Wipster

回答

3

这听起来像你的墙壁没有烤到你的导航网格。为了做到这一点,如果你还没有,点击窗口 - >导航,将导航窗口添加到你的编辑器。在场景中选择您的墙,然后在“对象”选项卡的“导航”窗格中,选中“导航静态”框。然后按导航窗格右下方的烘焙按钮。前提是你的墙上有一个对撞机,你会看到这样的事情:

enter image description here

蓝色区域表示您的导航代理者被允许走的地方。你会注意到你的墙上的区域不是蓝色的,所以你的代理人将无法走过那里。