2016-08-19 45 views
0

我對敵人的「視野」腳本有一些問題。看完一個教程,爲玩家創建一個視野後,我想我可以將它切換到敵人,以便他們檢測到玩家並做一些其他的事情。我創建了一個布爾變量「playerInRange」來檢測敵人是否檢測到玩家並將此變量設置爲true或false。 只用一個敵人就可以正常工作。當我添加另一個時,新敵人不會檢測到玩家。所以也許它與協程相關,但我不確定。也許你對我有一點暗示。 這裏是我的代碼一點點(我刪除評論的重要組成部分,使它稍微小了一點):敵人的視野只能與1個敵人一起工作

void Start() { 
    StartCoroutine("FindTargetsWithDelay", .2 f); 
} 

IEnumerator FindTargetsWithDelay(float delay) { 
    while (true) { 
     yield 
     return new WaitForSeconds(delay); 
     FindVisibleTargets(); 
    } 
} 

public void FindVisibleTargets() { 
    visibleTargets.Clear(); 

    Collider[] targetsInViewRadius = Physics.OverlapSphere(transform.position, viewRadius, targetMask); 

    for (int i = 0; i < targetsInViewRadius.Length; i++) { 
     Transform target = targetsInViewRadius[i].transform; 
     Vector3 dirToTarget = (target.position - transform.position).normalized; 
     if (Vector3.Angle(transform.forward, dirToTarget) < viewAngle/2) { 
      float dstToTarget = Vector3.Distance(transform.position, target.position); 

      if (!Physics.Raycast(transform.position, dirToTarget, dstToTarget, obstacleMask)) { 

       // Not so nice solution! 
       // The movement should be in a separate script! 
       visibleTargets.Add(target); 
       nav.SetDestination(player.position); 
       anim.SetBool("IsRunning", true); 

       if (dstToTarget < attackRange) { 
        playerInRange = true; 
        Debug.Log(playerInRange); 
       } 

      } 
     } else { 
      anim.SetBool("IsRunning", false); 
      playerInRange = false; 
      Debug.Log(playerInRange); 
     } 
    } 
} 
+0

OverlapSphere有targetMask,這個變量正確設置玩家的層? – Rob

+0

羅布嗨, 感謝您的評論。該targetMask設置正確(爲了我的觀點): ** public LayerMask targetMask; ** 我可以選擇哪一層是目標層,第一個敵人可以正常工作但不是第二個:/ – t3chnico

+2

你不用我猜你沒有看過這個腳本是在做什麼提示:如果第一個敵人看到玩家,但是第二個沒有看到玩家,會發生什麼?...如果第一個玩家沒有看到玩家,那該怎麼辦? ,但第二呢?) – Adam

回答

-1

謝謝你們爲你的小提示。這真是有點層次問題:(對不起,我是新手/ DAU問題。 乾杯 尼科

+0

如果評論回答了您的問題,您應該要求評論者將其作爲回答發佈或自己發佈答案,並將評論意見歸功於評論者。 – workoverflow