HideFlags.DontSave
Açıklama
Nesne, Sahneye kaydedilmeyecektir. Yeni bir Sahne yüklendiğinde yok edilmeyecektir. Bu, HideFlags.DontSaveInBuild | HideFlags.DontSaveInEditor | HideFlags.DontUnloadUnusedAsset için bir kısayoldur.
Bellek sızıntılarını önlemek için nesneyi DestroyImmediate kullanarak manuel olarak bellekten temizlemelisiniz.
Sahnede Prefab örnekleri için, Prefab örnek tutamaç nesnesinde hideflag ayarlayarak, Prefab örneğinin tüm nesnelerinde aynı hideflag'leri ayarlamanın bir yolunu kullanabilirsiniz. (Bkz. PrefabUtility.GetPrefabInstanceHandle).
using System.IO; using UnityEditor; using UnityEditor.SceneManagement; using UnityEngine; // Ana menüde 'Examples' altında yeni menü öğeleri oluşturur. public class DontSaveExamples { [MenuItem("Examples/GameObject (and child) HideFlags.DontSave example")] static void DontSaveExample_RootWithDontSave() { // Kök ve bir çocuk ile hiyerarşi kur GameObject rootGameObject = new GameObject("Root"); GameObject child = new GameObject("Child"); child.transform.parent = rootGameObject.transform; rootGameObject.hideFlags = HideFlags.DontSave; //child.hideFlags = HideFlags.DontSave; // Kök DontSave ile işaretlendiği için düz GameObject'ler için fark yok // Yeni sahne yükle EditorSceneManager.NewScene(NewSceneSetup.EmptyScene, NewSceneMode.Single); // Her iki nesne de hala var çünkü kök DontSave ile işaretlendi Debug.Log("Root name: " + rootGameObject.name + ", Child name: " + child.name); // Temizlemeyi unutmayın, bu aynı zamanda çocuğu da siler Object.DestroyImmediate(rootGameObject); } [MenuItem("Examples/Save Prefab with child HideFlags.DontSave example")] static void DontSaveExample_Prefab_ChildNotSavedToDisk() { // Assets klasörü içinde bir Prefabs klasörünün varlığını sağlayın if (!Directory.Exists("Assets/Prefabs")) AssetDatabase.CreateFolder("Assets", "Prefabs"); // Kök ve bir çocuk ile hiyerarşi kur GameObject rootGameObject = new GameObject("Root"); GameObject child = new GameObject("Child"); child.transform.parent = rootGameObject.transform; // Kaydetmeyi önlemek için çocuğu işaretle child.hideFlags = HideFlags.DontSave; // Prefab varlığını kaydet GameObject prefabAsset = PrefabUtility.SaveAsPrefabAsset(rootGameObject, "Assets/Prefabs/Root.prefab"); // Prefab'de çocuk yok çünkü çocuk DontSave olarak işaretlendi. childCount 0. Debug.Log("Child GameObject in Prefab: " + prefabAsset.transform.childCount); // Çocuk hala sahnede var. childCount 1. Debug.Log("Child GameObject in Scene GameObject: " + rootGameObject.transform.childCount); // Yeni sahne yükle EditorSceneManager.NewScene(NewSceneSetup.EmptyScene, NewSceneMode.Single); // Çocuk, sahne geçişinde silinen kök GameObject'in bir çocuğu olduğu için silinir if (child == null) Debug.Log("Child deleted correctly"); else Debug.Log("Child was not deleted successfully"); } }
Bu blog Unity Docs'un Türkçeye çevrilmiş halidir.
Yorumlar
Yorum Gönder