Использовать полную иконку персонажа и крестик для пустого приза. Добавить звук переключения, указатели выбора и анимацию добавленных призов за 0,3 секунды. Скрывать экран настроек на время работы с конфигуратором призов. Восстановить ссылку на префаб добавленного приза и оформить контекстные окна по макетам. Устранить повторное подтверждение QR-приза и исправить направление вертикальной навигации витрины. Проверено в Unity в режиме игры: ввод и сохранение значений, добавление и удаление пяти типов призов, анимация выбора и защита от повторного добавления. Ошибок в консоли нет.
77 lines
1.8 KiB
C#
77 lines
1.8 KiB
C#
using DG.Tweening;
|
|
using System;
|
|
using TMPro;
|
|
using UnityEngine;
|
|
using UnityEngine.UI;
|
|
|
|
public class MSignalButton : MonoBehaviour
|
|
{
|
|
public event Action OnClick;
|
|
|
|
[SerializeField] protected Image _image;
|
|
[SerializeField] protected TextMeshProUGUI _textMeshPro;
|
|
[SerializeField] protected Color _normalColor;
|
|
[SerializeField] protected Color _selectedColor;
|
|
[SerializeField] protected Color _pressedColor;
|
|
[SerializeField] protected AudioClip _clip;
|
|
|
|
protected bool _lastPressed = false;
|
|
protected Sequence _animation;
|
|
|
|
public void TakeInput(bool pressed)
|
|
{
|
|
if (_lastPressed != pressed)
|
|
{
|
|
if (pressed)
|
|
{
|
|
ClickAnimation();
|
|
}
|
|
_lastPressed = pressed;
|
|
}
|
|
}
|
|
|
|
public virtual void ClickAnimation()
|
|
{
|
|
StopAnimation();
|
|
|
|
_animation = DOTween.Sequence();
|
|
|
|
_animation.Append(_image.DOColor(_pressedColor, 0.15f));
|
|
_animation.Append(_image.DOColor(_selectedColor, 0.15f));
|
|
_animation.AppendCallback(() =>
|
|
{
|
|
OnClick?.Invoke();
|
|
SoundManager.instance.PlaySfx(_clip);
|
|
});
|
|
|
|
_animation.PlayForward();
|
|
}
|
|
|
|
public void SelectAnimation()
|
|
{
|
|
StopAnimation();
|
|
|
|
_animation = DOTween.Sequence().SetUpdate(true);
|
|
_animation.Append(_image.DOColor(_selectedColor, 0.3f));
|
|
_animation.Join(_textMeshPro.DOColor(Color.black, 0.3f));
|
|
_animation.PlayForward();
|
|
}
|
|
|
|
public void DeselectAnimation()
|
|
{
|
|
StopAnimation();
|
|
|
|
_image.color = _normalColor;
|
|
_textMeshPro.color = Color.white;
|
|
}
|
|
|
|
protected void StopAnimation()
|
|
{
|
|
if (_animation != null)
|
|
{
|
|
_animation.Kill();
|
|
_animation = null;
|
|
}
|
|
}
|
|
}
|