88 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			C#
		
	
	
	
			
		
		
	
	
			88 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			C#
		
	
	
	
| 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;
 | |
| #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()
 | |
|         {
 | |
|             _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)
 | |
|             {
 | |
|                 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;
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| }
 |