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

Bu blogdaki popüler yayınlar

Important Classes - Vectors

RequireComponent

Important Classes - GameObject