using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.UI; using System.Collections; public class GraphicsSettingsScroll : MonoBehaviour, IDragHandler, IScrollHandler { public RectTransform[] ³»¿ë¸ñ·Ï; // ¡ç ¹è¿­·Î º¯°æ! public float µå·¡±×¼Óµµ = 2f; public float ÈÙ¼Óµµ = 50f; private RectTransform ³»¿µ¿ª; private RectTransform ÇöÀç³»¿ë; // ÇöÀç Ȱ¼ºÈ­µÈ ³»¿ë void Start() { ³»¿µ¿ª = GetComponent(); StartCoroutine(ÃʱâÈ­()); } IEnumerator ÃʱâÈ­() { yield return null; yield return null; ÇöÀç³»¿ëã±â(); } void ÇöÀç³»¿ëã±â() { foreach (RectTransform ³»¿ë in ³»¿ë¸ñ·Ï) { if (³»¿ë != null && ³»¿ë.gameObject.activeInHierarchy) { ÇöÀç³»¿ë = ³»¿ë; Debug.Log("ÇöÀç³»¿ë: " + ³»¿ë.name); return; } } Debug.Log("ÇöÀç³»¿ë ¸øÃ£À½!"); } float Ãִ뽺ũ·Ñ() { if (ÇöÀç³»¿ë == null) return 0; return Mathf.Max(0, ÇöÀç³»¿ë.rect.height - ³»¿µ¿ª.rect.height); } public void OnDrag(PointerEventData ¸¶¿ì½º) { ÇöÀç³»¿ëã±â(); À̵¿(-¸¶¿ì½º.delta.y * µå·¡±×¼Óµµ); } public void OnScroll(PointerEventData ¸¶¿ì½º) { ÇöÀç³»¿ëã±â(); À̵¿(-¸¶¿ì½º.scrollDelta.y * ÈÙ¼Óµµ); } void À̵¿(float ¾ç) { if (ÇöÀç³»¿ë == null) return; float »õY = ÇöÀç³»¿ë.anchoredPosition.y + ¾ç; »õY = Mathf.Clamp(»õY, 0, Ãִ뽺ũ·Ñ()); ÇöÀç³»¿ë.anchoredPosition = new Vector2(0, »õY); } public void ½ºÅ©·ÑÃʱâÈ­() { Canvas.ForceUpdateCanvases(); ÇöÀç³»¿ëã±â(); if (ÇöÀç³»¿ë != null) { LayoutRebuilder.ForceRebuildLayoutImmediate(ÇöÀç³»¿ë); ÇöÀç³»¿ë.anchoredPosition = new Vector2(0, 0); } } }