在随机位置C#统一时产生但不重叠

问题描述

我是新来的。我试图在Unity中制作2D游戏,并试图在地图上随机生成敌人。我编写了这段代码,使冲撞数组能够找到冲撞,但是PreventOverlap函数永远不会成为现实。我尝试了几种方法,但是没有任何效果,我真的不明白为什么...您能帮忙吗?我也用Tiled创建了地图,并在其中插入了碰撞,我不知道是否是因为这个原因,但对于其他所有方面都起作用。这是代码

using UnityEngine;
using UnityEngine.SceneManagement;

public class EnemyRandomSpawner : MonoBehavIoUr
{
[Space]
[Header("Input Settings:")]
public GameObject[] enemy;
public float spawnRate = 1f;

public Collider2D[] colliders;

//------PRIVATES------//
private float randomX;
private float randomY;
private int RandomEnemy;

private float nextSpawn = 0f;
private Vector3 wheretoSpawn;

private float checkRadius = 50f;
private bool canSpawnHere = false;
private int safetyNet = 0;


// Update is called once per frame
private void Update()
{
    SpawningTime();
}

public void SpawningTime()
{
    if (Time.time > nextSpawn)
    {
        nextSpawn = Time.time + spawnRate;
        RandomEnemy = (int)Random.Range(0,enemy.Length);


        while (!canSpawnHere)
        {
            if (SceneManager.GetActiveScene().name == "Cave")
            {
                randomX = Random.Range(0.04f,12.69f);
                randomY = Random.Range(-9.55f,-4.91f);
            }
            else
            {
                randomX = Random.Range(0.04f,21f);
                randomY = Random.Range(-15.8f,-1f);
            }

            wheretoSpawn.x = randomX;
            wheretoSpawn.y = randomY;
            wheretoSpawn.z = 0f;

            canSpawnHere = PreventOverlap(wheretoSpawn);

            if (canSpawnHere)
            {
                break;
            }

            safetyNet++;

            if (safetyNet > 100)
            {                    
                Debug.LogError("Too many Attempts");
                break;
            }
        }
        if (canSpawnHere)
        {
            Instantiate(enemy[RandomEnemy],wheretoSpawn,Quaternion.identity).transform.SetParent(this.transform);
        }
        

    }
}

public bool PreventOverlap(Vector3 spawnPos)
{
    colliders = Physics2D.OverlapCircleAll(wheretoSpawn,checkRadius);

    for (int i = 0; i < colliders.Length; i++)
    {
        Vector3 centerPoint = colliders[i].bounds.center;       //check the bounds of each of the colliders
        float width = colliders[i].bounds.extents.x;
        float height = colliders[i].bounds.extents.y;

        float leftExtent = centerPoint.x - width;
        float rightExtent = centerPoint.x + width;
        float lowerExtent = centerPoint.y - height;
        float upperExtent = centerPoint.y + height;

        if (spawnPos.x >= leftExtent && spawnPos.x <= rightExtent)
        {
            if (spawnPos.y >= lowerExtent && spawnPos.y <= upperExtent)
            {
                return false;
            }
        }
    }
    return true;
}
}

非常感谢您!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)