【发布时间】:2017-09-01 23:12:16
【问题描述】:
我正在 Unity 5 中制作一个 2D 游戏,其中玩家拥有一把对玩家来说是孩子的枪,当玩家被击中时我如何摧毁枪?我正在使用的当前代码会破坏播放器,但不会破坏枪。
public float health=500f;
public GameObject gun;
void OnTriggerEnter2D(Collider2D collider){
BulletScript bullet = collider.gameObject.GetComponent<BulletScript> ();
if (bullet) {
health -= bullet.getdamage ();
bullet.hit ();
Handheld.Vibrate();
if (health <= 0) {
GetComponent<Animator> ().SetBool ("deadBool", true);
GetComponent<Animator> ().SetTrigger ("deadTrigger");
ExecuteAfterTime (1f);
Destroy (gun);
}
}
}
IEnumerator ExecuteAfterTime(float time){
yield return new WaitForSeconds (time);
Destroy (gameObject);
GameObject child = gameObject.GetComponentInChildren<> (gameObject);
}
注意:枪是应用脚本的玩家的孩子。
【问题讨论】:
-
我假设当不再存在对它的引用时,它会自动进行垃圾收集。因此,当您的玩家死亡时,参考计数器会减一。如果你没有更多关于那把枪的参考资料,它很快就会被扔掉。无论如何:为什么不打电话给
Destroy(child)? -
子对象应该在其父对象被销毁时自动销毁。请用 GameObject 和一个孩子做一个简单的测试,然后摧毁父母。孩子也该走了。
-
这把枪必须是层级视图中玩家的子级才能被销毁。