Menu
CoddyTech

破棄

CoddyのUnityジャーニー「Unityスクリプティングの基礎」セクションの一部。レッスン 52/67。

Destroy(obj) は、子オブジェクトも含めて GameObject をシーンから削除します。第2引数を指定すると削除を遅らせられます。Destroy(obj, 2f) は、今から2秒後に削除し、呼び出したスクリプトはすぐに処理を続けます。この大砲は Space キーを押すと発射し、生成した弾丸はそれぞれ2秒後に消えます。

public GameObject bulletPrefab;

void Update()
{
    if (Input.GetKeyDown(KeyCode.Space))
    {
        GameObject bullet = Instantiate(bulletPrefab, transform.position, Quaternion.identity);
        Destroy(bullet, 2f);
    }
}

プレハブではなく、そのコピーを渡してください。Destroy(bulletPrefab) は Destroying assets is not permitted to avoid data loss. というメッセージとともに拒否されます。また、オブジェクトを指定する場合は GameObject を渡してください。スクリプト内では、gameObject はそのスクリプトが付いているオブジェクトを指すため、Destroy(gameObject) はそのオブジェクトを削除しますが、Destroy(this) はスクリプトだけを削除し、オブジェクトは残します。

Destroy はその場では実行されません。Unity は現在のフレームの終わりに、そのフレームの Update() と LateUpdate() の呼び出し後にオブジェクトを削除するため、Destroy の後にある行も実行され、フレームが終わるまではオブジェクトを見つけることができます。

challenge icon

チャレンジ

中級

Chuteは毎秒コインを1枚落とします。この部分はすでに書かれています。次のように変更してください。

  • 各コインが出現してから3秒後に消えるようにし、同時に存在するコインが3枚を超えないようにする。
  • Spaceキーを押すとシュート自体が破棄され、それ以上コインが出てこないようにする。すでに出ているコインは、予定どおり消えます。

再生を押して数秒間観察し、Spaceキーを押してから確認を押してください。

自分で試してみよう

using UnityEngine;

public class CoinChute : MonoBehaviour
{
    public GameObject coinPrefab;
    public float interval = 1f;
    float timer;

    void Update()
    {
        timer += Time.deltaTime;
        if (timer >= interval)
        {
            Instantiate(coinPrefab, transform.position, Quaternion.identity);
            timer -= interval;
        }

        // Space: シュートを破壊する
    }
}
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

Unityスクリプティングの基礎のすべてのレッスン