using System; using UnityEditor; using static UnityEngine.Rendering.DebugUI.Table; namespace UnityEngine.Rendering { /// /// Attribute specifying that fields of this type should be inspected in depth by the . /// If the associated class instance is null, the system attempts to recreate it using its default constructor. /// /// /// Make sure classes using it have a default constructor! /// /// /// /// /// This shows how to use the attribute in the expected scenario. This is particularly useful for content creators. /// Adding a new field to a class that defines an asset results in null values for existing instances missing the field in their serialized data. Therefore, when a new field is added, a system for reloading null values may be necessary. /// ///using UnityEngine; ///using UnityEditor; /// ///[ReloadGroup] ///public class MyShaders ///{ /// [Reload("Shaders/Blit.shader")] /// public Shader blit; ///} /// ///public class MyResourcesAsset : ScriptableObject ///{ /// // Object used for contextualizing would resolve to be null in already existing /// // instance of MyResourcesAsset that already exists. /// public MyShaders shaders; /// /// [Reload("Textures/BayerMatrix.png")] /// public Texture2D bayerMatrixTex; ///} /// ///public static class MyResourceHandler ///{ /// public static MyResourcesAsset GetAndReload() /// { /// var resources = AssetDatabase.LoadAssetAtPath<MyResourcesAsset>("MyResources.asset"); /// /// // Ensure that update of the data layout of MyResourcesAsset /// // will not result in null value for asset already existing. /// // (e.g.: adding new field in MyResourcesAsset or MyShaders classes) /// ResourceReloader.ReloadAllNullIn(resources, "Packages/com.my-custom-package/"); /// return resources; /// } ///} /// /// [AttributeUsage(AttributeTargets.Class)] public sealed class ReloadGroupAttribute : Attribute { } }