我在Unity 2D(4.3)中制作2D游戏,我需要销毁在预制件离开屏幕时实例化的预制件。我已经编写了一些代码以生成对象,但是当它们离开屏幕时,我想删除这些预制件。
这是我到目前为止编写的代码。

生成预制件(C#):

void Update () {
    float y = Random.Range(-4.53f, 2.207f);
    if(x < 2000) {
        Instantiate(obstacle, new Vector3(y, x * 6.0f, 0),Quaternion.identity);
        x++;
    }
    //Debug.Log(x);

}


销毁预制件(C#):

    /*************************************************************************************************
     * GET INSTANTIATED OBSTACLE
     * AND DESTROY IT ON EXIT
     * TO SAVE MEMORY
    **************************************************************************************************/
    GameObject clone = (GameObject)Instantiate (obstacle);

    /*if(clone.transform.position.y == -11)
    {
        Destroy(clone);
        Debug.Log("Destroy");
    }*/

    Vector2 screenPosition = Camera.main.WorldToScreenPoint(transform.position);
    if (screenPosition.y > Screen.height || screenPosition.y < 0)
    {
        Destroy(gameObject);
        Debug.Log("Destroy");
    }


但是,销毁对象的代码不起作用,但也没有收到错误。预制件离开屏幕后,它会输出“销毁”,因此我知道销毁它们的代码有问题。

谢谢

最佳答案

您可以制作一个组件,当位置超出摄影机时会破坏自身,然后将该组件附加到障碍物上。

void Update() {
    float y = Random.Range(-4.53f, 2.207f);
    if(x < 2000) {
        GameObject clone = (GameObject)Instantiate(obstacle, new Vector3(y, x * 6.0f, 0),Quaternion.identity);
        clone.AddComponent(typeof(DestroyMySelf));
        x++;
    }
}


并且此组件附着在障碍物上会破坏自我。

public class DestroyMySelf : MonoBehaviour {
    void Update() {
        Vector2 screenPosition = Camera.main.WorldToScreenPoint(transform.position);
        if (screenPosition.y > Screen.height || screenPosition.y < 0)
        Destroy(this.gameObject);
    }
}

09-10 12:58