using UnityEngine; using UnityEngine.UI; using UnityEngine.SceneManagement; using TMPro; [System.Serializable] public class ModData { public Sprite modSprite; public string sceneName; } public class ModSelectManager : MonoBehaviour { [Header("━━━ MODLAR ━━━━━━━━━━━━━━━━━━━━━━━━━━━━")] public ModData[] mods; [Header("━━━ KART BOYUTLARI ━━━━━━━━━━━━━━━━━━━━")] public float cardWidth = 900f; public float cardHeight = 500f; public float spacing = 40f; [Header("━━━ PLAY BUTTON ━━━━━━━━━━━━━━━━━━━━━━━")] public string playButtonText = "PLAY"; public float playButtonWidth = 400f; public float playButtonHeight = 100f; void Start() { Canvas canvas = FindAnyObjectByType(); if (canvas == null) { GameObject canvasObj = new GameObject("Canvas"); canvas = canvasObj.AddComponent(); canvas.renderMode = RenderMode.ScreenSpaceOverlay; CanvasScaler scaler = canvasObj.AddComponent(); scaler.uiScaleMode = CanvasScaler.ScaleMode.ScaleWithScreenSize; scaler.referenceResolution = new Vector2(1080, 1920); scaler.screenMatchMode = CanvasScaler.ScreenMatchMode.MatchWidthOrHeight; scaler.matchWidthOrHeight = 0.5f; canvasObj.AddComponent(); } GameObject oldScroll = GameObject.Find("ModScrollView"); if (oldScroll != null) Destroy(oldScroll); GameObject scrollObj = new GameObject("ModScrollView"); scrollObj.transform.SetParent(canvas.transform, false); RectTransform scrollRect = scrollObj.AddComponent(); scrollRect.anchorMin = Vector2.zero; scrollRect.anchorMax = Vector2.one; scrollRect.offsetMin = Vector2.zero; scrollRect.offsetMax = Vector2.zero; ScrollRect scroll = scrollObj.AddComponent(); scroll.horizontal = false; scroll.vertical = true; scroll.movementType = ScrollRect.MovementType.Elastic; scroll.elasticity = 0.12f; scroll.inertia = true; scroll.decelerationRate = 0.135f; scroll.scrollSensitivity = 30f; GameObject viewportObj = new GameObject("Viewport"); viewportObj.transform.SetParent(scrollObj.transform, false); RectTransform viewportRect = viewportObj.AddComponent(); viewportRect.anchorMin = Vector2.zero; viewportRect.anchorMax = Vector2.one; viewportRect.offsetMin = Vector2.zero; viewportRect.offsetMax = Vector2.zero; Image viewportImage = viewportObj.AddComponent(); viewportImage.color = new Color(0f, 0f, 0f, 0f); Mask mask = viewportObj.AddComponent(); mask.showMaskGraphic = false; GameObject contentObj = new GameObject("Content"); contentObj.transform.SetParent(viewportObj.transform, false); RectTransform contentRect = contentObj.AddComponent(); contentRect.anchorMin = new Vector2(0f, 1f); contentRect.anchorMax = new Vector2(1f, 1f); contentRect.pivot = new Vector2(0.5f, 1f); contentRect.anchoredPosition = Vector2.zero; contentRect.sizeDelta = Vector2.zero; VerticalLayoutGroup vlg = contentObj.AddComponent(); vlg.spacing = spacing; vlg.padding = new RectOffset(50, 50, 50, 50); vlg.childAlignment = TextAnchor.UpperCenter; vlg.childControlWidth = false; vlg.childControlHeight = false; vlg.childForceExpandWidth = false; vlg.childForceExpandHeight = false; ContentSizeFitter csf = contentObj.AddComponent(); csf.verticalFit = ContentSizeFitter.FitMode.PreferredSize; csf.horizontalFit = ContentSizeFitter.FitMode.Unconstrained; scroll.viewport = viewportRect; scroll.content = contentRect; if (mods == null || mods.Length == 0) { Debug.LogWarning("ModSelectManager: mods listesi boş."); return; } foreach (ModData mod in mods) { if (mod == null) continue; GameObject card = new GameObject("ModCard"); card.transform.SetParent(contentObj.transform, false); RectTransform cardRect = card.AddComponent(); cardRect.sizeDelta = new Vector2(cardWidth, cardHeight); LayoutElement cardLayout = card.AddComponent(); cardLayout.preferredWidth = cardWidth; cardLayout.preferredHeight = cardHeight; cardLayout.minWidth = cardWidth; cardLayout.minHeight = cardHeight; cardLayout.flexibleWidth = 0f; cardLayout.flexibleHeight = 0f; Image cardImg = card.AddComponent(); cardImg.color = new Color(0.1f, 0.1f, 0.2f, 1f); GameObject imgObj = new GameObject("ModImage"); imgObj.transform.SetParent(card.transform, false); RectTransform imgRect = imgObj.AddComponent(); imgRect.anchorMin = Vector2.zero; imgRect.anchorMax = Vector2.one; imgRect.offsetMin = new Vector2(0f, 120f); imgRect.offsetMax = Vector2.zero; Image modImg = imgObj.AddComponent(); if (mod.modSprite != null) modImg.sprite = mod.modSprite; modImg.preserveAspect = true; modImg.raycastTarget = false; GameObject btnObj = new GameObject("PlayButton"); btnObj.transform.SetParent(card.transform, false); RectTransform btnRect = btnObj.AddComponent(); btnRect.anchorMin = new Vector2(0.5f, 0f); btnRect.anchorMax = new Vector2(0.5f, 0f); btnRect.pivot = new Vector2(0.5f, 0f); btnRect.sizeDelta = new Vector2(playButtonWidth, playButtonHeight); btnRect.anchoredPosition = new Vector2(0f, 10f); Image btnImg = btnObj.AddComponent(); btnImg.color = new Color(0.1f, 0.7f, 0.2f, 1f); Button btn = btnObj.AddComponent