FC2ブログ
    09 «1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.» 11

    ハルシオンシステムの気ままBlog

    株式会社ハルシオンシステムのメンバーが送る、UnityやらJavaやらの技術的話題から、自社開発のアプリの宣伝とかとかのブログです。ほんと気ままにいきたいと思います。更新日は毎週 月 木でっす!

     

    【ハルシオンブログ】Destroyでオブジェクトが消えるタイミングとかとか 

    おこんにちは。坂内っす。
    10月も後半になってきたじゃありませんか!
    さすがに寒くなってきましたねぇ 朝方寒くて目ガ覚めてしまったですよ。
    みなさんも風邪にお気を付けください。

    さて、Unityでこんな構成の時。
    子供のオブジェクトを全部消したいってことありますよね。



    こんな感じに順番に0番目を消せば消せるんじゃないかと

    [Blog20211018.cs]

    using UnityEngine;

    public class Blog20211018 : MonoBehaviour
    {
    [SerializeField] GameObject objParent;

    void Start()
    {
    for (int i = 0; i < 5; i++) {
    Destroy(objParent.transform.GetChild(0).gameObject);
    }
    }
    }



    どうなるかというと、1個目のオブジェクトしか消えません。
    Destroyを使用して、オブジェクトが削除されるタイミングは、フレーム更新の完了後のようです。(公式マニュアルによる)

    ではこうすればどうなるか。


    using System.Collections;
    using UnityEngine;

    public class Blog20211018 : MonoBehaviour
    {
    [SerializeField] GameObject objParent;

    IEnumerator Start()
    {
    for (int i = 0; i < 5; i++) {
    Destroy(objParent.transform.GetChild(0).gameObject);
    yield return null;
    }
    }
    }



    一応消えます・・・・・

    すごいまばらにですが(笑)



    こういう時はこうやって消しましょう(過去ブログにも書いたと思いますが)

    [Blog20211018.cs]

    using UnityEngine;

    public class Blog20211018 : MonoBehaviour
    {
    [SerializeField] GameObject objParent;

    void Start()
    {
    foreach (Transform trn in objParent.transform) {
    Destroy(trn.gameObject);
    }
    }
    }





    ちゃんと起動直後に全部まとめて消えてますね。

    ということで、Destroyのタイミングについてでした。

    あでゅ~ノシ

    Category: 開発日記(Unity)

    tb 0 : cm 0