我在 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++;
}
}
这个组件附着在障碍物上会 self 毁灭。
public class DestroyMySelf : MonoBehaviour {
void Update() {
Vector2 screenPosition = Camera.main.WorldToScreenPoint(transform.position);
if (screenPosition.y > Screen.height || screenPosition.y < 0)
Destroy(this.gameObject);
}
}
关于c# - (Unity 2D)在离开屏幕时销毁实例化的预制件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23217840/