private static void DestroyedMethod <DestroyedT>(DestroyedT destroyedObject, string destroyerName) where DestroyedT : UnityObject { ObjectDestroyedEventArgs <DestroyedT> DestroyedArgs = new ObjectDestroyedEventArgs <DestroyedT>(destroyedObject, destroyerName); ObjectDestroyedEventArgs <UnityObject> SentDestroyedArgs = (ObjectDestroyedEventArgs <UnityObject>)DestroyedArgs; _objectDestroyed?.Invoke(SentDestroyedArgs); }
public static async Task DestroyImmediate <DestroyedT>(DestroyedT DestroyedObject, int msDelay = 0, [CallerFilePath, DontProvide] string destroyerPath = "") where DestroyedT : UnityObject { string destroyerName = destroyerPath.Remove(destroyerPath.Length - 3).Split('\\').Last(); await Task.Delay(msDelay); DestroyingObjectEventArgs <DestroyedT> DestroyingArgs = new DestroyingObjectEventArgs <DestroyedT>(DestroyedObject, destroyerName); ObjectDestroyedEventArgs <DestroyedT> DestroyedArgs = new ObjectDestroyedEventArgs <DestroyedT>(DestroyedObject, destroyerName); //might be useless DestroyingObjectEventArgs <UnityObject> SentDestroyingArgs = (DestroyingObjectEventArgs <UnityObject>)DestroyingArgs; ObjectDestroyedEventArgs <UnityObject> SentDestroyedArgs = (ObjectDestroyedEventArgs <UnityObject>)DestroyedArgs; //might be useless _destroyingObject?.Invoke(SentDestroyingArgs); if (!SentDestroyingArgs.Cancel) { UnityObject.DestroyImmediate(DestroyedObject); } }