Это хороший способ получить доступ к игровому объекту в массиве коллайдеров? - PullRequest
0 голосов
/ 08 апреля 2020
Collider2D[] isInRange = Physics2D.OverlapCircleAll(transform.position, range,whatIsPlayer);
isInRange[0].GetComponent<Rigidbody2D>().AddForce(direction * gForce);

Это хороший способ получить доступ к GameObject в массиве коллайдеров? Кроме того, по вашему мнению, я должен поместить этот кусок кода в метод FixedUpdate () или Update ()?

1 Ответ

0 голосов
/ 10 апреля 2020

Поскольку это массив Collider2D, лучший способ - перебирать его. Кроме того, Physics2D.OverlapCircleAll() довольно интенсивно использует процессор, поэтому наилучшим вариантом будет размещение в FixedUpdate().

void FixedUpdate()
{
   Collider2D[] cols = Physics2D.OverlapCircleAll(transform.position, range, player);

   for (int i = 0; i < cols.Length; i++)
   {
      // Apply AddForce() to each founded Rigidbody2D
      cols[i].GetComponent<Rigidbody2D>().AddForce(direction * force);
   }
}

Эта реализация также избавляет вас от исключения NullReferenceException, если Collider2D [] пуст ( поэтому нет элемента 0).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...