using UnityEngine; using System; using Cysharp.Threading.Tasks; using ProjSG.Resource; public static class MaterialUtility { // T044: Materials must be pre-loaded via StartupEssential preload config // (location: "Assets/ResourcesOut/BuiltIn/Materials") public static Material GetDefaultSpriteGrayMaterial() { return ResourceCacheManager.Instance.GetCached("Assets/ResourcesOut/BuiltIn/Materials/SpriteGray.mat"); } public static Material GetInstantiatedSpriteGrayMaterial() { var material = new Material(GetDefaultSpriteGrayMaterial()); return material; } public static Material GetSmoothMaskGrayMaterial() { return ResourceCacheManager.Instance.GetCached("Assets/ResourcesOut/BuiltIn/Materials/SmoothMaskGray.mat"); } public static Material GetInstantiatedSpriteTwinkleMaterial() { var material = ResourceCacheManager.Instance.GetCached("Assets/ResourcesOut/BuiltIn/Materials/Flash.mat"); return new Material(material); } public static Material GetUIDefaultGraphicMaterial() { return UnityEngine.UI.Image.defaultGraphicMaterial; } public static Material GetGUIRenderTextureMaterial() { return ResourceCacheManager.Instance.GetCached("Assets/ResourcesOut/BuiltIn/Materials/UI_RenderTexture.mat"); } // ==================================================================== // US2: Async variants — temporary API. Replaced by preload+cache in T044. // ==================================================================== public static UniTask GetDefaultSpriteGrayMaterialAsync() { return ResManager.Instance.LoadAssetAsync("BuiltIn/Materials", "SpriteGray"); } public static UniTask GetSmoothMaskGrayMaterialAsync() { return ResManager.Instance.LoadAssetAsync("BuiltIn/Materials", "SmoothMaskGray"); } public static async UniTask GetInstantiatedSpriteTwinkleMaterialAsync() { var material = await ResManager.Instance.LoadAssetAsync("BuiltIn/Materials", "Flash"); return new Material(material); } public static UniTask GetGUIRenderTextureMaterialAsync() { return ResManager.Instance.LoadAssetAsync("BuiltIn/Materials", "UI_RenderTexture"); } public static void SetRenderSortingOrder(this GameObject root, int sortingOrder, bool includeChildren) { if (root == null) { throw new NullReferenceException(); } if (includeChildren) { var renderers = root.GetComponentsInChildren(); for (var i = 0; i < renderers.Length; i++) { var renderer = renderers[i]; renderer.sortingOrder = sortingOrder; } } else { var renderer = root.GetComponent(); if (renderer != null) { renderer.sortingOrder = sortingOrder; } } } }