我在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);
}
}