| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- namespace SRF.UI
- {
- using System;
- using Internal;
- using UnityEngine;
- using UnityEngine.UI;
- [ExecuteInEditMode]
- [RequireComponent(typeof(RectTransform))]
- [AddComponentMenu(ComponentMenuPaths.ScrollToBottom)]
- public class ScrollToBottomBehaviour : MonoBehaviour
- {
- #pragma warning disable 649
- [SerializeField]
- private ScrollRect _scrollRect;
- [SerializeField]
- private CanvasGroup _canvasGroup;
- [SerializeField]
- private bool _scrollToTop;
- #pragma warning restore 649
- public void Start()
- {
- if (_scrollRect == null)
- {
- Debug.LogError("[ScrollToBottomBehaviour] ScrollRect not set");
- return;
- }
- if (_canvasGroup == null)
- {
- Debug.LogError("[ScrollToBottomBehaviour] CanvasGroup not set");
- return;
- }
-
- _scrollRect.onValueChanged.AddListener(OnScrollRectValueChanged);
- Refresh();
- }
- void OnEnable()
- {
- Refresh();
- }
- public void Trigger()
- {
- if (_scrollToTop)
- {
- _scrollRect.normalizedPosition = new Vector2(0, 1);
- }
- else
- {
- _scrollRect.normalizedPosition = new Vector2(0, 0);
- }
- }
- private void OnScrollRectValueChanged(Vector2 position)
- {
- Refresh();
- }
- private void Refresh()
- {
- if (_scrollRect == null)
- return;
- var position = _scrollRect.normalizedPosition;
- if (position.y < 0.001f || (_scrollToTop && position.y >= 0.999f))
- {
- SetVisible(false);
- }
- else
- {
- SetVisible(true);
- }
- }
- void SetVisible(bool truth)
- {
- if (truth)
- {
- _canvasGroup.alpha = 1f;
- _canvasGroup.interactable = true;
- _canvasGroup.blocksRaycasts = true;
- }
- else
- {
- _canvasGroup.alpha = 0f;
- _canvasGroup.interactable = false;
- _canvasGroup.blocksRaycasts = false;
- }
- }
- }
- }
|