Track OnDestroy() Who called it?

Hello guys. I am working on a project and I have several functions capable of destroying an object.
I would like to know if there is a way to print the name of the function which destroyed triggered the OnDestroy() function of my destroyed object.

Thanks a lot in advance.

Edit: Right now I am printing the name of the function on each function before I call GameObject.Destroy(obj)… However, I think there should be another method(?)

I don’t think Unity provides a way to detect who destroyed your object using only the OnDestroy message.

However, you can define a custom class which inherits from MonoBehaviour to have the possibility to track it :

//C#
public class MyMonoBehaviour : MonoBehaviour
{
    public void DestroyGameObject( MonoBehaviour caller = null )
    {
        if( caller != null )
        {
            Debug.Log( gameObject.name + " has been destroyed by " + caller.gameObject.name ) ;
        }
        GameObject.Destroy( gameObject ) ;
    }
}

To destroy the gameobject, use :

// C#
MyMonoBehaviour myMonoBehaviour = otherObject.GetComponent<MyMonoBehaviour>() ?? otherObject.gameObject.AddComponent<MyMonoBehaviour>() ;
myMonoBehaviour.DestroyGameObject( this ) ;

It may not be the simpler way, but I think, it works ! :wink: