问题描述
我是新来的。我试图在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 (将#修改为@)