Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 销毁当前生成的游戏对象,而不是整个预置_C#_Unity3d - Fatal编程技术网

C# 销毁当前生成的游戏对象,而不是整个预置

C# 销毁当前生成的游戏对象,而不是整个预置,c#,unity3d,C#,Unity3d,我的实例化在1到2次繁殖后停止,但我希望它们在整个游戏中永远保持繁殖 这是因为我在这个脚本中有一段销毁代码,但我能做什么呢?我需要它们在碰撞后死去,否则屏幕上会像以前一样出现数百个。像往常一样,敌人死后必须死去并消失。那我该怎么办?销毁代码正在销毁整个敌方玩家/预制件,而不仅仅是我想要的死亡实例 我希望敌人继续产卵,但当然,当被玩家杀死时,他们必须消失 2d游戏我在敌人预制场和场景中有这个脚本 我希望屏幕上的敌人在碰撞时一个接一个地死去,但我认为毁灭正在杀死整个对象/预制体,它将不再实例化/繁殖

我的实例化在1到2次繁殖后停止,但我希望它们在整个游戏中永远保持繁殖

这是因为我在这个脚本中有一段销毁代码,但我能做什么呢?我需要它们在碰撞后死去,否则屏幕上会像以前一样出现数百个。像往常一样,敌人死后必须死去并消失。那我该怎么办?销毁代码正在销毁整个敌方玩家/预制件,而不仅仅是我想要的死亡实例

我希望敌人继续产卵,但当然,当被玩家杀死时,他们必须消失

2d游戏我在敌人预制场和场景中有这个脚本

我希望屏幕上的敌人在碰撞时一个接一个地死去,但我认为毁灭正在杀死整个对象/预制体,它将不再实例化/繁殖

我有一些关于敌人的脚本,这里是实例化脚本

使用UnityEngine; 使用系统集合

public class spn2 : MonoBehaviour {

  GameObject Enemy;
//public GameObject EasyEnemey;
    public GameObject MediumEnemey;
    public GameObject HardEnemey;
    public Transform[] SpawnPoints;
    public float TimeBetweenSpawns;
    public int NumberOfEnemiesToSpawn;
    public int NumberOfMediumEnemiesToSpawn;
    public float EasyChance;
    public float MediumChance;
    public float HardChance;

    private int waveNumber;
    private float spawnTimer;
    private int numberOfEnemies;
    private int numberOfMediumEnemies;
    // Use this for initialization
    void Start()
    {
        //this below is the time to spawn so if 4 , every 4 seconds 1 will spawn  etc
        this.spawnTimer = 3.0f;
        this.waveNumber = 0;
        float totalChance = this.EasyChance + this.MediumChance + this.HardChance;
        if(Mathf.Abs(totalChance-1.0f)>0.0001f) { 
            Debug.LogWarning("Warning: The chances should add up to 1.0 ("+totalChance+" currently)");
        }
    }

    // Update is called once per frame
    void  Update()
    {
        this.spawnTimer -= Time.deltaTime;
        if(this.spawnTimer<=0.0f)
        {
            Transform spawnPoint = this.SpawnPoints[Random.Range(0, this.SpawnPoints.Length)];
            Vector2 spawnPos = spawnPoint.position;
            Quaternion spawnRot = spawnPoint.rotation;
            switch(this.waveNumber)
            {
            case 0:
                //Instantiate(EasyEnemey, spawnPos,spawnRot);
            Instantiate(Resources.Load(Enemy) as GameObject, spawnPos, spawnRot);

                this.numberOfEnemies++;
                if(this.numberOfEnemies>=this.NumberOfEnemiesToSpawn)
                {
                    this.waveNumber++;
                }
                break;
            case 1:
                Instantiate(MediumEnemey, spawnPos, spawnRot);
                this.numberOfMediumEnemies++;
                if (this.numberOfMediumEnemies >= this.NumberOfMediumEnemiesToSpawn)
                {
                    this.waveNumber++;
                }
                break;
            case 2:
                float randomFloat = Random.value;
                if(randomFloat<this.EasyChance)
                {
                    Instantiate(Enemy, spawnPos, spawnRot);
                }
                else if(randomFloat<this.EasyChance+this.MediumChance)
                {
                    Instantiate(MediumEnemey, spawnPos, spawnRot);
                }
                else
                {
                    Instantiate(HardEnemey, spawnPos, spawnRot);
                }
                break;
            }
            this.spawnTimer = this.TimeBetweenSpawns;

        Destroy (gameObject, .7f);
        }

    }

}
公共类spn2:单一行为{
猎物敌人;
//公共游戏对象EasyEnemey;
公共游戏对象MediumEnemey;
公开的游戏对象;
公共转换点;
公共浮动时间间隔;
公共int号码受益人产卵;
公共国际号码MediumenemiesToSpawn;
公共交通便利化;
公共浮动机会;
公共机会;
私有整数波数;
专用浮点数计时器;
私人敌人;
私人媒体内联号码;
//用于初始化
void Start()
{
//下面是产卵时间,因此如果为4,则每4秒1将产卵,以此类推
此.spawnTimer=3.0f;
这个波数=0;
float totalChance=this.EasyChance+this.MediumChance+this.HardChance;
如果(数学绝对值(totalChance-1.0f)>0.0001f){
LogWarning(“警告:机会加起来应该是1.0(“+totalChance+”当前)”);
}
}
//每帧调用一次更新
无效更新()
{
this.spawhtimer-=Time.deltaTime;
if(this.spawnTimer=this.numberofenemiestopawn)
{
这个.waveNumber++;
}
打破
案例1:
实例化(MediumEnemey、spawnPos、spawnRot);
这个.numberOfMediumEnemies++;
如果(this.numberOfMediumEnemies>=this.numberOfMediumEnemies tospawn)
{
这个.waveNumber++;
}
打破
案例2:
float Random float=Random.value;

如果(randomFloat您将预置实例化为实际对象,那么当您删除实例时,您将删除预置。请尝试使用此代码进行初始化。这将创建预置的副本并将其作为实例加载

GameObject enemy = Instantiate(Resources.Load("Name of your prefab here") as GameObject, spawnPos, spawnRot);
对于你的其他问题,在你的东西开始产卵的时候,让我们看看你的代码。我删除了一些不相关的东西,但我只是从你的东西上复制粘贴。看看你的代码在做什么。

每次更新(Unity连续调用,我们可以近似为每帧一次),我们将此方法称为update。它从SpawnTimer中减去一些时间,因此假设您的spawn timer为4秒,time.DeltaTime为1秒(不是,但这是一个示例)

所以你的更新将运行4次,这很好,但是现在会发生什么呢?突然,你的繁殖计时器为0,这种情况下

if(this.spawnTimer<=0.0f)

如果(this.spawnTimer您将预置实例化为实际对象,那么当您删除实例时,您将删除预置。请尝试使用此代码进行初始化。这将创建预置的副本并将其作为实例加载

GameObject enemy = Instantiate(Resources.Load("Name of your prefab here") as GameObject, spawnPos, spawnRot);
对于你的其他问题,在你的东西开始产卵的时候,让我们看看你的代码。我删除了一些不相关的东西,但我只是从你的东西上复制粘贴。看看你的代码在做什么。

每次更新(Unity连续调用,我们可以近似为每帧一次),我们将此方法称为update。它从SpawnTimer中减去一些时间,因此假设您的spawn timer为4秒,time.DeltaTime为1秒(不是,但这是一个示例)

所以你的更新将运行4次,这很好,但是现在会发生什么呢?突然,你的繁殖计时器为0,这种情况下

if(this.spawnTimer<=0.0f)

if(this.spawhtimer)将您拥有的代码
实例化(EasyEnemey,spawnPos,spawnRot);
使用
实例化(Resources.Load(“此处预制的名称”)作为游戏对象,spawnPos,spawnRot)
确保将预置名称添加到加载中。我是否在所有地方都替换它?我有很多地方,而不仅仅是一个地方。好的,在一个地方尝试,创建一个简单的敌人,删除它,看看它是否有效,然后如果有效,则在所有地方替换实例化调用。好的,我是否也必须更改开头的公共变量预置名称?我没有想得对吗?您可以保留名称,只需分配给它,就像这样:
EasyEnemey=Instantiate(Resources.Load(“此处的易敌预制名称”)作为游戏对象,spawnPos,spawnRot);
替换您拥有的
Instantiate(EasyEnemey,spawnPos,spawnRot);
使用
实例化(Resources.Load(“此处的预制名称”)作为游戏对象、spawnPos、spawnRot)
确保将预置名称添加到加载中。我是否在所有地方都替换它?我有很多地方,而不仅仅是一个地方。好的,在一个地方尝试,创建一个简单的敌人,删除它,看看它是否有效,然后如果有效,则在所有地方替换实例化调用。好的,我是否也必须更改开头的公共变量预置名称?我没有想得对吗?你可以保留名称,只需分配给它,就像这样:
EasyEnemey=Instantiate(Resources.Load(“这里的易敌预制名称”)作为GameObject,spawnPos,spawnRot);
这行中的GameObject是什么?
Destroy(GameObject.7f);
你是什么意思