using AssetKits.ParticleImage; using System.Collections; using UnityEngine; using UnityEngine.Events; /// /// 材料效果 /// public class StuffEffects : MonoBehaviour { /// /// 生成音效次数 /// private int generateAudioNumber; /// /// 到达音效次数 /// private int arriveAudioNumber; /// /// UI粒子 /// public ParticleImage particleImage; /// /// 结束事件 /// private UnityAction endAction; /// /// 材料类型 /// private E_StuffType e_StuffType; /// /// 初始化 /// /// 图标 /// 目标 public void Init(E_StuffType e_StuffType, Transform targtet,UnityAction callBack, float number, bool isTrails,int generateAudioNumber,int arriveAudioNumber) { this.generateAudioNumber = generateAudioNumber; this.arriveAudioNumber = arriveAudioNumber; particleImage.attractorTarget = targtet; particleImage.rateOverTime = number; this.e_StuffType = e_StuffType; endAction = callBack; SetSprite(); SetScale(); SetTrails(isTrails); } /// /// 设置图片 /// private void SetSprite() { switch (e_StuffType) { case E_StuffType.Money: YooAssetManager.Instance.LoadAssetAsync(PackagesName.GameData, MyConstant.MoneyIcon, (sprite) => { particleImage.sprite = sprite; }); break; } } /// /// 设置拖尾 /// private void SetTrails(bool isTrails) { particleImage.trailsEnabled = isTrails; Color color=Color.white; switch (e_StuffType) { case E_StuffType.Money: color = MyConstant.Green; break; } particleImage.trailColorOverLifetime = new ParticleSystem.MinMaxGradient(color); } /// /// 设置缩放 /// private void SetScale() { Vector3 scale=Vector3.zero; switch (e_StuffType) { case E_StuffType.Money: scale = Vector3.one; break; } transform.localScale = scale; } /// /// 生成 /// public void Generate() { switch (e_StuffType) { case E_StuffType.Money: PlayAudio(5, MyConstant.GenerateMoneyAudio); break; } } /// /// 到达终点 /// public void ReachEndPoint() { switch (e_StuffType) { case E_StuffType.Money: PlayAudio(arriveAudioNumber, MyConstant.ArriveMoneyAudio); break; } endAction?.Invoke(); } /// /// 播放音效 /// /// public void PlayAudio(int number, string audio) { StartCoroutine(E_PlayAudio(number, YooAssetManager.Instance.LoadAssetSync(PackagesName.GameData, audio))); } /// ///播放音效协程 /// private IEnumerator E_PlayAudio(int number, AudioClip audioClip) { for (int i = 0; i < number; i++) { AudioManager.Instance.PlaySound(audioClip); yield return new WaitForSeconds(0.08f); } } /// /// 回收 /// public void Reclaim() { CachePoolManager.Instance.Put(this.gameObject); } }