using UnityEngine; using UnityEngine.UI; using System.Collections.Generic; using Cysharp.Threading.Tasks; public class HeroCallResultCell : MonoBehaviour { [SerializeField] UIHeroController heroModel; [SerializeField] Image newMarkImg; [SerializeField] UIEffectPlayer starEffect; [SerializeField] UIEffectPlayer lightEffect; [SerializeField] UIEffectPlayer boomEffect; [SerializeField] UIEffectPlayer tableEffect; /// /// 抽奖结果的小人展示 /// /// /// 第几抽,0代表单抽 /// 强制跳过动画 public void Display(int heroID, int index, bool isForceSkip=false) { DisplayAsync(heroID, index, isForceSkip).Forget(); } async UniTask DisplayAsync(int heroID, int index, bool isForceSkip=false) { this.transform.localScale = Vector3.zero; int delaytime = LocalSave.GetBool(HeroUIManager.skipKey, false) ? 50 * index : 100 * index; await UniTask.Delay(delaytime); this.transform.localScale = Vector3.one; //先显示台子,再显示小人 heroModel.SetActive(false); newMarkImg.SetActive(false); var heroConfig = HeroConfig.Get(heroID); var quality = heroConfig.Quality; //是否跳过动画 if (isForceSkip || LocalSave.GetBool(HeroUIManager.skipKey, false)) { //红色特殊 if (!isForceSkip) { boomEffect.playDelayTime = 0; boomEffect.PlayByArrIndex(quality > 4 ? 0 : 1); } DisplayNewMark(heroID); DisplayHero(heroConfig); tableEffect.Stop(); tableEffect.isPlaySpineLoop = true; tableEffect.PlayByArrIndex(quality); return; } starEffect.PlayByArrIndex(index); //紫色开始有播放 if (quality <= 1) { lightEffect.Stop(); } else { lightEffect.PlayByArrIndex(quality - 2); } boomEffect.playDelayTime = lightEffect.playDelayTime; //红色特殊 boomEffect.PlayByArrIndex(quality > 4 ? 0 : 1); //先播放灰色台子上升,再播放小人 tableEffect.onComplete = () => { DisplayNewMark(heroID); DisplayHero(heroConfig); tableEffect.isPlaySpineLoop = true; tableEffect.PlayByArrIndex(quality); }; tableEffect.Stop(); tableEffect.isPlaySpineLoop = false; tableEffect.PlayByArrIndex(0); } public void DisplayNewMark(int heroID) { newMarkImg.SetActive(HeroUIManager.Instance.IsNewHero(heroID)); } public void DisplayHero(HeroConfig heroConfig) { heroModel.SetActive(true); heroModel.Create(heroConfig.SkinIDList[0], 0.7f); } }