2016-08-19 10 views
0

У меня есть проблемы со сценарием для «Fiel Of View» врага. После просмотра учебника, чтобы создать поле зрения для игрока, я думал, что могу переключить его на врагов, чтобы они обнаружили игрока и сделали некоторые другие вещи. Я создал логическую переменную «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

Спасибо ребята за ваш маленький намек. Это было на самом деле небольшая проблема иерархии :(Жалко, что новичку/ДАУ вопрос. Приветствия Нико

+0

Если комментарий ответил на ваш вопрос, вы должны попросить комментатора опубликовать его в качестве ответа или опубликовать ответ самостоятельно и отдать должное комментатору. – workoverflow