当其中一个人击中“完成”标签时,我想阻止敌人产卵。
这是产生敌人的脚本:
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;
}
}
}
这段代码有什么问题?谢谢!
答案 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来检查你是否应该继续产生敌人。