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

时间:2020-10-12 16:07:49

标签: c# unity3d gameobject

我实例化了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, new Vector3(positionPos, spawnerOdozgo.transform.position.y, 1), 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, 3);
        Debug.Log("sta" + staSpawnati);

        switch (staSpawnati)
        {
            case 1:
                UIjabuka = Instantiate(Jabuka, new Vector3(Random.Range(minx, maxx), spawnerOdozdo.transform.position.y, 1), transform.rotation);
                jabukaRig = UIjabuka.GetComponent<Rigidbody2D>();
                jabukaRig.velocity = new Vector2(0, veclocityI);

                break;
            case 2:
                UIkruska = Instantiate(kruska, new Vector3(Random.Range(minx, maxx), spawnerOdozdo.transform.position.y, 1), transform.rotation);
                kruskaRig = UIkruska.GetComponent<Rigidbody2D>();
                kruskaRig.velocity = new Vector2(0, veclocityI);
                break;
        }

        nextSpawn = Time.time + vrijemeSpawna;
    }
}

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

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

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