首页 > 解决方案 > 如何统一限制生成对象

问题描述

我正在尝试在生成对象中添加限制。我想将 spawn 对象保持为一个。但它根本不起作用。

using UnityEngine;
using System.Collections;
using System.Collections.Generic;

public class Spawn : MonoBehaviour {

public Spawn04[] pest;
public GameObject plantPest;





void Start () {
}

[System.Obsolete]
void Update () {
if(plantPest.active)
{
    SpawnObjects();
}


}
void SpawnObjects()
{
    int i = Random.Range(0, 100);

    for(int j = 0; j < pest.Length; j++)
    {
        if(i >= pest[j].minProbabilityRange && i <= pest[j].maxProbabilityRange)
        {
            Instantiate(pest[j].spawnObject, transform.position, transform.rotation);
            break;
        }
        if(pest[j].pestCount >= pest[j].maxNumber)
        {
            Destroy(this.gameObject);
        }
    }
  }
}

[System.Serializable]
public class Spawn04
{
public GameObject spawnObject;
public int minProbabilityRange = 0;
public int maxProbabilityRange = 0;
public int maxNumber = 1;
public int pestCount = 0;
}

标签: c#unity3d

解决方案


您只需要一个计数器和一个变量来控制您的最大计数。只要记住在对象消失后减少计数器。

public class Spawn : MonoBehaviour {
    
    public Spawn04[] pest;
    public GameObject plantPest;
    
    public int maxPests = 10;          // ADDED
    private int pestsSpawned = 0;      // ADDED

    [System.Obsolete]
    void Update () {
        if(plantPest.active)
        {
            SpawnObjects();
        }
    }
    void SpawnObjects()
    {
        // NEW CHECK
        if (pestsSpawned < maxPests) {
            int i = Random.Range(0, 100);

            for(int j = 0; j < pest.Length; j++)
            {
                if(i >= pest[j].minProbabilityRange && i <= pest[j].maxProbabilityRange)
                {
                    Instantiate(pest[j].spawnObject, transform.position, transform.rotation);
                    pestsSpawned++;     // COUNT TRACKER
                    break;
                }
                
            }
        }
    }
}
  

另一种选择是在 Spawn04 对象上使用静态变量,如下所示:

public class Spawn : MonoBehaviour {
    
    public Spawn04[] pest;
    public GameObject plantPest;
    
    public int maxPests = 10;     // ADDED

    [System.Obsolete]
    void Update () {
        if(plantPest.active)
        {
            SpawnObjects();
        }
    }
    
    void SpawnObjects()
    {
        // NEW CHECK
        if (Spawn04.spawnCount <= maxPests) {
            int i = Random.Range(0, 100);

            for(int j = 0; j < pest.Length; j++)
            {
                if(i >= pest[j].minProbabilityRange && i <= pest[j].maxProbabilityRange)
                {
                    Instantiate(pest[j].spawnObject, transform.position, transform.rotation);
                    Spawn04.spawnCount++;     // COUNT TRACKER
                    break;
                }
                
            }
        }
    }
}
  
[System.Serializable]
public class Spawn04
{
    
    public GameObject spawnObject;
    public int minProbabilityRange = 0;
    public int maxProbabilityRange = 0;
    public static int spawnCount = 0;     // ADDED
} 

希望这对如何解决这个问题有一些启发。


推荐阅读