135 lines
3.9 KiB
C#
135 lines
3.9 KiB
C#
using System.Collections;
|
|
using UnityEngine;
|
|
using UnityEngine.UI;
|
|
using UnityEngine.EventSystems;
|
|
|
|
namespace Michsky.MUIP
|
|
{
|
|
public class DemoListShadow : MonoBehaviour, IBeginDragHandler
|
|
{
|
|
[Header("Resources")]
|
|
[SerializeField] private Scrollbar listScrollbar;
|
|
[SerializeField] private CanvasGroup leftCG;
|
|
[SerializeField] private CanvasGroup rightCG;
|
|
|
|
[Header("Settings")]
|
|
[SerializeField] private float scrollTime = 5;
|
|
[SerializeField] private float transitionSpeed = 4;
|
|
|
|
void Awake()
|
|
{
|
|
CheckForValue(0);
|
|
}
|
|
|
|
public void CheckForValue(float value)
|
|
{
|
|
if (value > 0.05)
|
|
{
|
|
StopCoroutine("LeftCGFadeOut");
|
|
StartCoroutine("LeftCGFadeIn");
|
|
}
|
|
|
|
else
|
|
{
|
|
StopCoroutine("LeftCGFadeIn");
|
|
StartCoroutine("LeftCGFadeOut");
|
|
}
|
|
|
|
if (value < 0.95)
|
|
{
|
|
StopCoroutine("RightCGFadeOut");
|
|
StartCoroutine("RightCGFadeIn");
|
|
}
|
|
|
|
else
|
|
{
|
|
StopCoroutine("RightCGFadeIn");
|
|
StartCoroutine("RightCGFadeOut");
|
|
}
|
|
}
|
|
|
|
public void ScrollUp() { StopCoroutine("ScrollDownHelper"); StartCoroutine("ScrollUpHelper"); }
|
|
public void ScrollDown() { StopCoroutine("ScrollUpHelper"); StartCoroutine("ScrollDownHelper"); }
|
|
public void OnBeginDrag(PointerEventData data) { StopCoroutine("ScrollUpHelper"); StopCoroutine("ScrollDownHelper"); }
|
|
|
|
IEnumerator ScrollUpHelper()
|
|
{
|
|
float elapsedTime = 0;
|
|
|
|
while (elapsedTime < scrollTime)
|
|
{
|
|
listScrollbar.value = Mathf.Lerp(listScrollbar.value, 0, elapsedTime / scrollTime);
|
|
elapsedTime += Time.unscaledDeltaTime;
|
|
yield return new WaitForEndOfFrame();
|
|
}
|
|
}
|
|
|
|
IEnumerator ScrollDownHelper()
|
|
{
|
|
float elapsedTime = 0;
|
|
|
|
while (elapsedTime < scrollTime)
|
|
{
|
|
listScrollbar.value = Mathf.Lerp(listScrollbar.value, 1, elapsedTime / scrollTime);
|
|
elapsedTime += Time.unscaledDeltaTime;
|
|
yield return new WaitForEndOfFrame();
|
|
}
|
|
}
|
|
|
|
IEnumerator LeftCGFadeIn()
|
|
{
|
|
leftCG.interactable = true;
|
|
leftCG.blocksRaycasts = true;
|
|
|
|
while (leftCG.alpha < 0.99f)
|
|
{
|
|
leftCG.alpha += Time.unscaledDeltaTime * transitionSpeed;
|
|
yield return new WaitForEndOfFrame();
|
|
}
|
|
|
|
leftCG.alpha = 1;
|
|
}
|
|
|
|
IEnumerator LeftCGFadeOut()
|
|
{
|
|
leftCG.interactable = false;
|
|
leftCG.blocksRaycasts = false;
|
|
|
|
while (leftCG.alpha > 0.01f)
|
|
{
|
|
leftCG.alpha -= Time.unscaledDeltaTime * transitionSpeed;
|
|
yield return new WaitForEndOfFrame();
|
|
}
|
|
|
|
leftCG.alpha = 0;
|
|
}
|
|
|
|
IEnumerator RightCGFadeIn()
|
|
{
|
|
rightCG.interactable = true;
|
|
rightCG.blocksRaycasts = true;
|
|
|
|
while (rightCG.alpha < 0.99f)
|
|
{
|
|
rightCG.alpha += Time.unscaledDeltaTime * transitionSpeed;
|
|
yield return new WaitForEndOfFrame();
|
|
}
|
|
|
|
rightCG.alpha = 1;
|
|
}
|
|
|
|
IEnumerator RightCGFadeOut()
|
|
{
|
|
rightCG.interactable = false;
|
|
rightCG.blocksRaycasts = false;
|
|
|
|
while (rightCG.alpha > 0.01f)
|
|
{
|
|
rightCG.alpha -= Time.unscaledDeltaTime * transitionSpeed;
|
|
yield return new WaitForEndOfFrame();
|
|
}
|
|
|
|
rightCG.alpha = 0;
|
|
}
|
|
}
|
|
} |