首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >只有当敌人少于10个时,我才能每30秒修改一次代码以生成敌人。

只有当敌人少于10个时,我才能每30秒修改一次代码以生成敌人。
EN

Stack Overflow用户
提问于 2022-01-19 00:18:44
回答 2查看 204关注 0票数 -1

如何修改统一c#上的代码,使其每30秒生成一次敌人,只有在战场上的敌人少于10个时。

目前,我在枚举器中有一个while循环,它将敌人生成为10,但在开始时才被调用,当敌人数量达到1时,我需要该函数来生成敌人。

谢谢。

代码语言:javascript
运行
复制
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class GenerateEnemies : MonoBehaviour
{
    public GameObject theEnemy;
    public int xPos;
    public int zPos;
    public int enemyCount;

    void Start()
    {
        StartCoroutine(SpawnEnemy());
    }

    IEnumerator SpawnEnemy()
    {
        while (enemyCount < 10)
        {
            xPos = Random.Range(153, 203);
            zPos = Random.Range(-76, 76);
            Instantiate(theEnemy, new Vector3(xPos, 9, zPos), Quaternion.identity);
            yield return new WaitForSeconds(0.9f);
            enemyCount += 1;
        }
    }
}
EN

Stack Overflow用户

回答已采纳

发布于 2022-01-19 01:28:09

我根本没有测试过这段代码

嗨,Obito,让我向您展示这段代码,看看您是否可以实现它:

代码语言:javascript
运行
复制
[Header("Spawning Properties")]
public GameObject enemyPrefab;
public Vector3 spawnPoint;
public int maxEnemies = 10;
public int minEnemies = 1;

//This is the time between each spawn.
public float spawnDelay = 0.9f;
public spawnTimer = 30f;
//Every enemy *needs* an 'Enemy' script, or tag, to identify what is an enemy.
public int EnemyCount => GameObject.FindObjectsOfType<Enemy>();

private void Awake() 
{
    spawnTimer = 30f;
}

private void Update() 
{
    spawnTimer -= Time.deltaTime;
    //"Do I need to start spawning enemies?"
    if(EnemyCount <= minEnemies && spawnTimer <= 0) {
        StartCoroutine(SpawnEnemies());
    }
}

private IEnumerator SpawnEnemies()
{
    while(EnemyCount <= maxEnemies) 
    {
        Instantiate(enemyPrefab, spawnPoint, Quaternion.identity);
        yield return new WaitForSeconds(spawnDelay);
        Debug.Log("Enemy " + EnemyCount + "/" + maxEnemies + " spawned.");
        
    }
    spawnTimer = 30f;
}

提示:如果你想建立一个“每波敌人”系统,你应该尝试这样做:

代码语言:javascript
运行
复制
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerMovement : MonoBehaviour
{   
    [Header("Spawning Properties")]
    public GameObject enemyPrefab;
    public Vector3 spawnPoint;
    public int[] wavesCount = { 10, 14, 23, 40 };
    public int minEnemiesPerWave = 1;
    public int currentWave = 0;    
    //This is the time between each spawn.
    public float spawnDelay = 0.9f;
    private float spawnTimer = 30f;
    //Every enemy *needs* an 'Enemy' script, or tag, to identify what is an enemy.
    public int EnemyCount => GameObject.FindObjectsOfType<Enemy>();

    private void Start() {
        spawnTimer = 30f;
    }

    private void Update() 
    {
        spawnTimer -= Time.deltaTime;
        //"Do I need to start spawning enemies?"
        if(EnemyCount <= minEnemiesPerWave && spawnTimer <= 0) {
            StartCoroutine(SpawnEnemies());
        }
    }

    private IEnumerator SpawnEnemies()
    {
        while(EnemyCount <= wavesCount[currentWave]) 
        {
            Instantiate(enemyPrefab, spawnPoint, Quaternion.identity);
            yield return new WaitForSeconds(spawnDelay);
            Debug.Log("Enemy " + EnemyCount + "/" + maxEnemies + " spawned.");
        }
        spawnTimer = 30f;
        currentWave++;
    }
}
票数 0
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70763936

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档