using UnityEngine; using UnityEngine.UI; namespace Vanguard.UI { /// /// Фон экрана входа: key art на весь экран (cover) и затемнение по краям. /// Арт лежит в Resources, потому что Addressables в клиенте ещё не подключены. /// public static class LoginBackdrop { private const string ResourcePath = "Login/login_bg"; public static RectTransform Create(Transform parent) { var rootGo = new GameObject("LoginBackdrop", typeof(RectTransform)); var root = (RectTransform)rootGo.transform; root.SetParent(parent, false); UiKit.Stretch(root); root.SetAsFirstSibling(); var texture = Resources.Load(ResourcePath); if (texture != null) { var artGo = new GameObject( "Art", typeof(RectTransform), typeof(Image), typeof(AspectRatioFitter)); var art = (RectTransform)artGo.transform; art.SetParent(root, false); UiKit.Stretch(art); var image = artGo.GetComponent(); image.sprite = Sprite.Create( texture, new Rect(0f, 0f, texture.width, texture.height), new Vector2(0.5f, 0.5f), 100f); image.type = Image.Type.Simple; image.preserveAspect = false; image.raycastTarget = false; var fitter = artGo.GetComponent(); fitter.aspectMode = AspectRatioFitter.AspectMode.EnvelopeParent; fitter.aspectRatio = texture.width / (float)texture.height; } else { // Арта нет — тёмная заливка, экран не должен падать. var fallback = UiKit.CreatePanel( root, "Fallback", new Color(0.02f, 0.05f, 0.13f, 1f)); fallback.GetComponent().raycastTarget = false; } var shade = NeonUi.AddImage( root, "Shade", NeonUi.Vignette( 480, 270, new Color(0f, 0f, 0f, 0.08f), new Color(0.004f, 0.016f, 0.055f, 0.72f)), new Vector2(480f, 270f), Vector2.zero); shade.preserveAspect = false; UiKit.Stretch(shade.rectTransform); return root; } } }