У меня есть префаб противника, который будет появляться в случайном положении несколько раз вокруг игрока. Однако иногда это может привести к тому, что один вражеский префаб перекрывает другой вражеский префаб.
Итак, я написал скрипт, который использует Physics2D.OverlapCircleAll()
для обнаружения любых коллайдеров перед созданием вражеского префаба, который позволяет избежать вражеского префаба от перекрытия существующего противника. ,Моя проблема в том, что OverlapCircleAll()
не обнаружил другие экземпляры префаба.
Я уже пробовал с Physics2D.OverlapBoxAll
также. Если я создаю более 30
из этих «вражеских префабов» , по крайней мере один из них перекрывает другого врага
Этот код используется для обнаружения перекрытия:
public void SpawnEachEnemy(GameObject Enemy)
{
Vector3 futurePosition = new Vector2(UnityEngine.Random.Range(UpperLeft.transform.position.x, DownRight.transform.position.x),
UnityEngine.Random.Range(UpperLeft.transform.position.y, DownRight.transform.position.y));
bool correctPosition = false;
while (!correctPosition)
{
Collider2D[] collider2Ds = Physics2D.OverlapCircleAll(futurePosition,0.2f);
if (collider2Ds.Length > 0)
{
//re-spawning to prevent overlap
futurePosition = new Vector2(UnityEngine.Random.Range(UpperLeft.transform.position.x, DownRight.transform.position.x),
UnityEngine.Random.Range(UpperLeft.transform.position.y, DownRight.transform.position.y));
}
else
{
correctPosition = true;
}
}
GameObject b = Instantiate(Enemy) as GameObject;
b.transform.position = futurePosition;
b.transform.parent = this.transform;
}