ошибка при использование DoTWeen в Unity
У меня есть скрипт, который делает анимации окна и его элементов с помощью DoTween. Но в консоли непонятная мне ошибка:
UnityException: get_isPlaying is not allowed to be called from a MonoBehaviour constructor (or instance field initializer), call it in Awake or Start instead. Called from MonoBehaviour 'FadePanel' on game object 'Button (Legacy)'.
See "Script Serialization" page in the Unity Manual for further details.
DG.Tweening.DOTween.InitCheck () (at D:/DG/_Develop/__UNITY_ASSETS/_Demigiant/__DOTween/_DOTween.Assembly/DOTween/DOTween.cs:1128)
DG.Tweening.DOTween.Sequence () (at D:/DG/_Develop/__UNITY_ASSETS/_Demigiant/__DOTween/_DOTween.Assembly/DOTween/DOTween.cs:732)
FadePanel..ctor () (at Assets/Assets1/scripts/FadePanel.cs:21)
Сам скрипт:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using DG.Tweening;
public class FadePanel : MonoBehaviour
{
public CanvasGroup alfaGroup;
public RectTransform BuyPanel;
private RectTransform shopButt;
Vector2 TargetPos;
Vector2 StartPos;
Vector2 targBut;
public List<RectTransform> tranf = new List<RectTransform>();
private bool isOpen = false;
Sequence anim = DOTween.Sequence();
private void Awake()
{
TargetPos = BuyPanel.transform.position;
StartPos = new Vector2(-Screen.width / 2, StartPos.x);
targBut = new Vector2(90, 177);
}
private void OnMouseDown()
{
if (!isOpen)
{
isOpen = true;
anim
.Append(BuyPanel.DOAnchorPos(TargetPos, 1f).From(StartPos))
.Join(alfaGroup.DOFade(1, 1f).From(0))
.Join(shopButt.DOAnchorPos(targBut, 1f).From(shopButt.position));
IconsUp();
}
else
{
anim
.Append(alfaGroup.DOFade(0, 1f).From(1))
.Join(shopButt.DOAnchorPos(shopButt.position, 1f).From(targBut));
}
}
private void IconsUp()
{
for (int i = 0; i < tranf.Count; i++)
{
anim
.Append(tranf[i].DOScale(1, 0.5f).From(0));
}
}
}
Ответы (1 шт):
Автор решения: Qwer
→ Ссылка
Дело в этой строчке, где происходит инициализация anim:
Sequence anim = DOTween.Sequence();
Фактически это означает, что будет создан неявный (скрытый) конструктор, где и будет выполнена эта инициализация. Так как Юнити не допускает создание пользовательских конструкторов в классах производных от MonoBehaviour - ты получаешь ошибку.
Попробуй перенести инициализацию anim в Awake:
Sequence anim; // убираем отсюда инициализацию
void Awake ()
{
anim = DOTween.Sequence(); // теперь инициализируем тут
// здесь остальной код
}