Object.DestroyImmediate
Declaration
public static void DestroyImmediate(Object obj, bool allowDestroyingAssets = false);Параметры
| Параметр | Описание |
|---|---|
| Объект | Объект, подлежащий уничтожению. |
| allowDestroyingAssets | Установите в значение true, чтобы разрешить уничтожение ассетов. |
Описание
Немедленно уничтожает указанный объект. Используйте с осторожностью и только в режиме редактирования.
DestroyImmediate предназначен для использования в скриптах, которые запускаются в режиме редактирования, а не во время выполнения. В режиме редактирования обычно задерживается уничтожение, выполняемое Destroy не происходит, поэтому необходимо немедленно уничтожить.
В коде времени выполнения используйте Object.Destroy Этот вызов отмечает объект для уничтожения в конце текущего кадра, что более безопасно и предотвращает многие общие проблемы. Если вы хотите только отключить объект, вы можете использовать GameObject, использование GameObject.SetActive вместо этого.
Попытка вызвать DestroyImmediate во время физических событий триггера/контакта, обратных вызовов событий анимации, обратных вызовов рендеринга, или MonoBehaviour.OnValidate приводит к ошибке.
Использование DestroyImmediate с факультативным протоколом allowDestroyingAssets параметр установлен на true может навсегда удалить ресурсы из проекта.
Уничтожение или удаление объектов из коллекции (например, массива или списка) при циклическом прохождении через нее может привести к пропускам элементов, ошибкам вне пределов или другому непредсказуемому поведению. Это общий риск программирования, не уникальный для Unity.
// Select one or more GameObjects in your hierarchy. // Go to the menu: Tools > Destroy Selected GameObjects Immediately. // The selected GameObjects will be deleted from the scene immediately.
using UnityEngine; using UnityEditor;
public class DestroyImmediateExample { [MenuItem("Tools/Destroy Selected GameObjects Immediately")] static void DestroySelectedGameObjects() { // Get all selected GameObjects in the scene var selected = Selection.gameObjects;
if (selected.Length == 0) { Debug.LogWarning("No GameObjects selected!"); return; }
foreach (var go in selected) { // Destroys the object immediately in the editor Object.DestroyImmediate(go); } Debug.Log($"{selected.Length} GameObjects destroyed immediately."); } }