using UnityEngine;
|
using DG.Tweening;
|
|
public class HeroDebutCallResultCell : MonoBehaviour
|
{
|
[SerializeField] public ItemCell itemCell;
|
[SerializeField] UIEffectPlayer orbBaseEffect; // 初始状态特效
|
[SerializeField] UIEffectPlayer orbBoomEffect; // 爆发瞬间特效
|
[SerializeField] UIEffectPlayer orbQualityEffect; // 品质底色特效
|
[SerializeField] UIEffectPlayer flowEffect; // 最终流光特效
|
|
[HideInInspector] public Vector3 originalLocalPos;
|
|
void Awake()
|
{
|
// 记录初始本地坐标,用于发牌动画的归位
|
originalLocalPos = transform.localPosition;
|
}
|
|
/// <summary>
|
/// 初始化格子数据
|
/// </summary>
|
public void DisplayItemCell(int itemID, int count)
|
{
|
itemCell.Init(new ItemCellModel(itemID, true, count));
|
itemCell.button.SetListener(() => ItemTipUtility.Show(itemID));
|
}
|
|
/// <summary>
|
/// 重置所有 UI 元素和特效至初始状态
|
/// </summary>
|
public void ResetState()
|
{
|
itemCell.gameObject.SetActive(false);
|
orbBaseEffect.SetActive(false);
|
orbBoomEffect.SetActive(false);
|
orbQualityEffect.SetActive(false);
|
flowEffect.SetActive(false);
|
}
|
|
/// <summary>
|
/// 阶段 1:播放初始引导光点(飞行阶段)
|
/// </summary>
|
public void PlayInitialOrb()
|
{
|
orbBaseEffect.SetActive(true);
|
orbBoomEffect.SetActive(false);
|
orbQualityEffect.SetActive(false);
|
|
orbBaseEffect.Play(4); // 播放索引为4的通用飞行效
|
}
|
|
/// <summary>
|
/// 阶段 2 & 3:执行爆开、显色、翻牌、展示流光的组合序列
|
/// </summary>
|
/// <param name="qualityIndex">品质底色特效索引</param>
|
/// <param name="flowQualityIndex">最终流光特效索引</param>
|
/// <returns>返回 Sequence 方便外部进行 Stagger(交错)排列</returns>
|
public Tween PlayExplosionFadeAndFlipReveal(int qualityIndex, int flowQualityIndex)
|
{
|
Sequence seq = DOTween.Sequence();
|
|
// [0.0s] 切换特效:关闭飞行态,触发爆发态
|
seq.InsertCallback(0f, () =>
|
{
|
orbBaseEffect.SetActive(false);
|
orbBoomEffect.SetActive(true);
|
orbBoomEffect.Play(3);
|
});
|
|
// [0.2s] 展示品质基色
|
seq.InsertCallback(0.2f, () =>
|
{
|
orbQualityEffect.transform.localScale = Vector3.zero;
|
orbQualityEffect.SetActive(true);
|
orbQualityEffect.Play(qualityIndex);
|
});
|
|
// 品质光团由小变大的回弹动画
|
seq.Insert(0.2f, orbQualityEffect.transform.DOScale(Vector3.one, 0.2f).SetEase(Ease.OutBack));
|
|
// [0.8s] 准备翻牌:激活 ItemCell 并设置 90 度侧向,准备旋转
|
seq.InsertCallback(0.8f, () =>
|
{
|
itemCell.gameObject.SetActive(true);
|
itemCell.transform.localEulerAngles = new Vector3(0, 90f, 0);
|
});
|
|
// [0.8s] 翻转动作(耗时 0.3s):从 90 度旋转回 0 度
|
seq.Insert(0.8f, itemCell.transform.DOLocalRotate(Vector3.zero, 0.3f, RotateMode.Fast).SetEase(Ease.OutSine));
|
|
// [1.1s] 序列完结:清理临时特效,激活持久流光
|
seq.InsertCallback(1.1f, () =>
|
{
|
orbBoomEffect.SetActive(false);
|
orbQualityEffect.SetActive(false);
|
|
flowEffect.SetActive(true);
|
flowEffect.Play(flowQualityIndex);
|
});
|
|
return seq;
|
}
|
}
|