using System.Collections; using UnityEngine; public class MenuUi : MonoBehaviour { [Header("Время перемещения блока")] [SerializeField] float blockMoveDuration = 0.6f; [Header("Верхний блок")] [SerializeField] RectTransform TopContainer; private Vector2 TopMenuPosition; [SerializeField] Vector2 TopGameplayOffset = new Vector2(0, 1000); [Header("Нижний блок")] [SerializeField] RectTransform BottomContainer; private Vector2 BottomMenuPosition; [SerializeField] Vector2 BottomGameplayOffset =new Vector2(0, -1000); [Header("Режим на одного")] [SerializeField] RectTransform PveContainer; private Vector2 PveMenuPosition; [SerializeField] Vector2 PveGameplayOffset = new Vector2(-2000, 0); [Header("Режим на двоих")] [SerializeField] RectTransform PvpContainer; private Vector2 PvpMenuPosition; [SerializeField] Vector2 PvpGameplayOffset = new Vector2(2000, 0); [Header("Надпись призы закончились")] [SerializeField] RectTransform PrizesOut; private Vector2 PrizesOutMenuPosition; [SerializeField] Vector2 PrizesOutGameplayOffset = new Vector2(-2000, -409+70); [SerializeField] Vector2 PrizesOutGameplayPosition = new Vector2(0, -409); private Vector2 PrizesOutMenuSizeDelta; [SerializeField] Vector2 PrizesOutGameplaySizeDelta = new Vector2(660, 100); [Header("Счетчик монет")] [SerializeField] Transform CoinCounter; private Vector2 CoinCounterMenuPosition; [SerializeField] Vector2 CoinCounterGameplayPosition = new Vector3(-8.964f, 3.6f); [Header("Доска")] [SerializeField] Transform Board; private Vector2 BoardMenuPosition; [SerializeField] Vector2 BoardGameplayPosition = new Vector2(0, -0.5f); private bool _cached = false; bool processing = false; bool Menu; bool Gameplay; float last_t = 0; void InitializeIfNeed() { if (!_cached) CacheStartParametrs(); } void CacheStartParametrs() { //Кэшируем стартовые позиции и размеры TopMenuPosition = TopContainer.anchoredPosition; BottomMenuPosition = BottomContainer.anchoredPosition; PveMenuPosition = PveContainer.anchoredPosition; PvpMenuPosition = PvpContainer.anchoredPosition; PrizesOutMenuPosition = PrizesOut.anchoredPosition; PrizesOutMenuSizeDelta = PrizesOut.sizeDelta; CoinCounterMenuPosition = CoinCounter.localPosition; BoardMenuPosition = Board.localPosition; _cached = true; } public void OpenMenu() { InitializeIfNeed(); StopAllCoroutines(); } public void CloseMenu() { InitializeIfNeed(); } IEnumerator OpenGameplayAnim() { float t = last_t; //ШАГ 1. ПРЯЧЕМ МЕНЮ t = 0; while (t < 1) { t += Time.deltaTime * 2; t = Mathf.Clamp01(t); TopContainer.anchoredPosition = Vector2.Lerp(TopMenuPosition, TopMenuPosition + TopGameplayOffset, t); PveContainer.anchoredPosition = Vector2.Lerp(PveMenuPosition, PveMenuPosition + PveGameplayOffset, t); PvpContainer.anchoredPosition = Vector2.Lerp(PvpMenuPosition, PvpMenuPosition + PvpGameplayOffset, t); BottomContainer.anchoredPosition = Vector2.Lerp(BottomMenuPosition, BottomMenuPosition + BottomGameplayOffset, t); PrizesOut.anchoredPosition = Vector2.Lerp(PrizesOutMenuPosition, PrizesOutMenuPosition + PrizesOutGameplayOffset, t); CoinCounter.localPosition = Vector2.Lerp(CoinCounterMenuPosition, CoinCounterGameplayPosition, t); yield return null; } //ШАГ 1. Показываем доску t = 0; PrizesOut.sizeDelta = PrizesOutGameplaySizeDelta; while (t < 1) { t += Time.deltaTime * 2;//скорость надо высчитывать t = Mathf.Clamp01(t); Board.localPosition = Vector2.Lerp(BoardMenuPosition, BoardGameplayPosition, t); PrizesOut.anchoredPosition = Vector3.Lerp(PrizesOutMenuPosition + PrizesOutGameplayOffset, PrizesOutGameplayPosition, t); yield return null; } } IEnumerator OpenMenuAnim() { //ШАГ 1. УБРАТЬ ДОСКУ float t = 0; while (t < 1) { t += Time.deltaTime * 2;//скорости править t = Mathf.Clamp01(t); Board.localPosition = Vector2.Lerp(BoardGameplayPosition, BoardMenuPosition, t); PrizesOut.anchoredPosition = Vector2.Lerp(PrizesOutGameplayPosition, PrizesOutMenuPosition + PrizesOutGameplayOffset, t); CoinCounter.localPosition = Vector2.Lerp(CoinCounterGameplayPosition, CoinCounterMenuPosition, t); yield return null; } //ШАГ 2. ПОКАЗАТЬ МЕНЮ t = 0; PrizesOut.sizeDelta = PrizesOutMenuSizeDelta; while (t < 1) { t += Time.deltaTime * 2; t = Mathf.Clamp01(t); TopContainer.anchoredPosition = Vector2.Lerp(TopMenuPosition + TopGameplayOffset, TopMenuPosition, t); BottomContainer.anchoredPosition = Vector2.Lerp(BoardMenuPosition + BottomGameplayOffset, BoardMenuPosition, t); //перемещение кнопок PveContainer.anchoredPosition = Vector2.Lerp(PveMenuPosition + PvpGameplayOffset, PveMenuPosition, t); PvpContainer.anchoredPosition = Vector2.Lerp(PvpMenuPosition + PvpGameplayOffset, PvpMenuPosition, t); PrizesOut.anchoredPosition = Vector2.Lerp(PrizesOutMenuPosition + PrizesOutGameplayOffset, PrizesOutMenuPosition, t); yield return null; } } }