在Unity中销毁实例化游戏对象的问题

问题描述

我实例化了Gameobject,现在我想销毁它,但是由于某种未知的原因,我找不到解决方法。当我检查对象的位置是否小于某个数字时,甚至小于该数字它不会在if语句中执行代码:下面是代码,因此,如果有人对如何销毁这些实例化对象有一个了解:

[SerializeField]
GameObject Jabuka;
[SerializeField]
GameObject kruska;
[SerializeField]
GameObject brisacDonji;
[SerializeField]
GameObject brisacGornji;

public float MoveSpeed = 3f;

public GameObject spawnerOdozgo;
public GameObject spawnerOdozdo;

GameObject UIjabuka;
GameObject UIkruska;

Rigidbody2D jabukaRig;
Rigidbody2D kruskaRig;

float minx = -2f;
float maxx = 2f;

float vrijemeSpawna = 2f;
float nextSpawn = 0f;

int staSpawnati;
int SpawnGoreILidole;

float positionPos;
public float veclocityI;

private Vector2 screenBounds;

// Start is called before the first frame update
void Start()
{
    screenBounds = Camera.main.ScreenToWorldPoint(new Vector3(Screen.width,Screen.height,Camera.main.transform.position.z));
}

// Update is called once per frame
void Update()
{
    veclocityI = Random.Range(2,6);
    positionPos = Random.Range(minx,maxx);

    SpawnGoreILidole = Random.Range(1,3);
    switch (SpawnGoreILidole)
    {
        case 1:
            spawnOdozgo();
            break;
        case 2:
            spawnOdozdo();
            break;
    }
}

void FixedUpdate()
{
}

public void spawnOdozgo()
{
    if (Time.time > nextSpawn)
    {
        staSpawnati = Random.Range(1,3);
        Debug.Log("sta" + staSpawnati);

        switch (staSpawnati)
        {
            case 1:
                UIjabuka = Instantiate(Jabuka,new Vector3(positionPos,spawnerOdozgo.transform.position.y,1),transform.rotation);
                jabukaRig = UIjabuka.GetComponent<Rigidbody2D>();
                jabukaRig.velocity = new Vector2(0,-veclocityI);
                if (UIjabuka.transform.position.y < brisacDonji.transform.position.y)
                {
                    Destroy(UIjabuka);
                    Debug.Log("unisteno je");
                }

                break;
            case 2:
                UIkruska = Instantiate(kruska,transform.rotation);
                kruskaRig = UIkruska.GetComponent<Rigidbody2D>();
                kruskaRig.velocity = new Vector2(0,-veclocityI);
                break;
        }

        nextSpawn = Time.time + vrijemeSpawna;
    }
}

public void spawnOdozdo()
{
    if (Time.time > nextSpawn)
    {
        staSpawnati = Random.Range(1,new Vector3(Random.Range(minx,maxx),spawnerOdozdo.transform.position.y,veclocityI);

                break;
            case 2:
                UIkruska = Instantiate(kruska,veclocityI);
                break;
        }

        nextSpawn = Time.time + vrijemeSpawna;
    }
}

解决方法

我没有足够的时间查看您的整个代码。但是,如果您的switch语句大小写不为1,则您的if语句将永远不会执行。如果您要破坏对象,则需要确保将变量staSpawnati设置为1。

,

从上面发布的代码中,您需要满足3个条件才能使用“销毁”功能。

  1. SpawnGoreILidole必须为1 ,以满足第一个开关条件并输入spawnOdozgo()
  2. staSpawnati必须为1 才能满足第二种切换要求,并输入销毁所在的代码部分。
  3. UIjabuka.transform.position.y必须小于brisacDonji.transform.position.y ,然后销毁将在UIjabuka游戏对象上执行。

从我的角度来看,代码根本没有任何意义,因为您将破坏上面创建的4行游戏对象。但这是执行销毁所需的条件。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...