如何阻止Unity 3D中的敌人产生?

时间:2017-01-08 18:48:27

标签: c# unity3d

当其中一个人击中“完成”标签时,我想阻止敌人产卵。

这是产生敌人的脚本:

public class spawn : MonoBehaviour {

    public GameObject enemy;
    private float spawnpoint;
    public float xlimit = 12f;
    float spawnNewEnemyTimer = 1f;

    void Start()
    {

    }

    public void Update()
    {
        spawnNewEnemyTimer -= Time.deltaTime;

        if (spawnNewEnemyTimer <= 0 )
        {
            spawnNewEnemyTimer = 3;
            GameObject nemico = Instantiate(enemy);
        }
    }

这是使敌人出现在随机点并移动的脚本:

public class nemici : MonoBehaviour {

    float speed = 4f;

    public GameObject enemy;
    public float xlimit = 12f;
    private float currentPosition;
    public GameObject spawn;
    bool endGame = false;

    void Start()
    {
        if (endGame == false)
        {
            Vector3 newPosition = transform.position;
            newPosition.x = Random.Range(-xlimit, xlimit);
            transform.position = newPosition;
        }
        else if (endGame == true)
        {
            return;
        }
    }

    void Update()
    {
        if (endGame == false)
        {
            //per farlo muovere verso il basso
            Vector3 movimento = new Vector3(0f, -speed, 0f);    //(x, y, z)
            transform.position += movimento * Time.deltaTime;
        }
        else if (endGame == true)
        {
            return;
        }
    }

    void OnTriggerEnter(Collider other)
    {
        if (other.tag == "Player")
        {
            Destroy(enemy);
        }

        else if (other.tag == "Finish")
        {
            Debug.Log("hai perso!");
            endGame = true;
        }
      }
   }

这段代码有什么问题?谢谢!

1 个答案:

答案 0 :(得分:0)

产生新敌人的逻辑是在产卵类中。决定你是否应该停止产生敌人的逻辑,存在于敌人阶层。

当你想要敌人在击中带有结束标记的对象时停止产生时,你成功地将endgame布尔值设置为true。

void OnTriggerEnter(Collider other){
    if (other.tag == "Finish"){
        Debug.Log("hai perso!");
        endGame = true;
    }
}

大!但你实际上并没有用它来阻止产卵。 到目前为止,这个变量是每个敌人的本地变量因此,如果您在启动和更新功能中包含检查,它们将仅针对触摸完成对象的特定敌人激活。这不是你想要的。

您希望Spawn类检查endgame变量,如果它处于活动状态,则停止产生敌人。

要做到这一点,你必须以某种方式能够从Spawn访问endgame变量,我建议你使endGame变量成为te Spawn类的成员。并且你在每个敌人中都包含对Spawn的引用。

所有这些可能看起来像这样:

public class Spawn: MonoBehaviour{
    public boolean endgame = false;
    GameObject nemico = Instantiate(Enemy);
    nemico.ParentSpawn = this
}

public class Enemy: MonoBehaviour{
    public Spawn spawn;
    void OnTriggerEnter(Collider other){
        if (other.tag == "Finish"){
            Spawn.endGame = true;
        }
    }
}

然后你可以使用Spawn中的endgame boolean来检查你是否应该继续产生敌人。