8
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

誰がDestroyを呼んだのか調べる方法

Posted at

結論

  • OnDisable() 内にログ仕込めばOK

Destroyを呼んだ瞬間は非アクティブになるだけで、実体はまだ消滅していない。
実際にDestroyされるのは同フレームのLateUpdateより後のタイミングになる。

実験

以下のようなコンポーネントを適当なオブジェクトにつけて実行

public class DelayDestroy : MonoBehaviour
{
    private IEnumerator Start()
    {
        yield return new WaitForSeconds(3.0f);
        Destroy(this.gameObject);
    }

    void OnDisable()
    {
        Debug.Log("スタックトレースにDestroyを呼んだコードが出る");
    }

    void OnDestroy()
    {
        Debug.Log("この行からしかスタックトレースに出ない");
    }
}

OnDisableの方にはDestroyが呼ばれた箇所も出力される。
スクリーンショット 2018-03-02 17.49.29.png

8
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?