Unity2D:使用数组生成对象并在退出摄像机视图后删除生成对象

时间:2016-08-20 13:31:57

标签: arrays unity3d

是否有一种更简单的方法可以控制我想在检查器中生成多少敌人,而不是在我的代码中继续复制和粘贴相同的方法,但重命名它。嗯,我认为使用数组(例子):

array

应该做的但我不知道如何在我的代码中实现它。谢谢,麻烦您了! :)

我的代码:

public GameObject enemy;

// Variable to know how fast we should create new enemies
public float spawnTime = 2;


void Start() {  
    // Call the 'addEnemy' function every 'spawnTime' seconds
    InvokeRepeating ("addEnemy", spawnTime, spawnTime);

}
// New function to spawn an enemy
void addEnemy() {  
    // Variables to store the X position of the spawn object
    // See image below
    var x1 = transform.position.x - GetComponent<Renderer> ().bounds.size.x / 2;
    var x2 = transform.position.x + GetComponent<Renderer> ().bounds.size.x / 2;
    // Randomly pick a point within the spawn object
    var spawnPoint = new Vector2 (Random.Range (x1, x2), transform.position.y);
    // Create an enemy at the 'spawnPoint' position
    Instantiate (enemy, spawnPoint, Quaternion.identity);
 }
}

P.S。有人知道如何在退出主摄像机视图后删除生成的对象。 :)

2 个答案:

答案 0 :(得分:0)

整个技巧是你必须在视图后面保留一个空的gameObject(用户视图)让它称之为驱逐舰。为Game对象添加一个标签,以便你可以识别与驱逐舰相撞的对象。如果标签是他们有资格被销毁然后使用Destroy(gameObject)应该破坏gameObject。

答案 1 :(得分:0)

我建议您使用Coroutines来控制要生成的对象数量,但我发现使用您的代码可以实现周转。

  1. 声明两个变量,用于说明要生成的最大对象数量以及场景中当前的对象数量public int spawnMax = 6, currentTotal = 0;
  2. 将此行添加到addEnemy function if (currentTotal >= spawnMax) CancelInvoke("addEnemy");
  3. 为了删除摄像机视图之外的对象,我会将一个空的游戏对象作为摄像机的子对象,并且在孩子们中放置对着摄像机视图的边框的对撞机,最后使用标签和OnCollision / OnTrigger用于检测是否有任何对象在外面。