2016-10-12 210 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

藍色區域表示您的導航代理者被允許走的地方。你會注意到你的牆上的區域不是藍色的,所以你的代理人將無法走過那裏。