using System; using System.Collections; using System.Collections.Generic; using UnityEngine; public class WoodSculpture : MonoBehaviour { public WoodSculpture_Buildings woodSculpture_Buildings; public Type type = Type.Simple; public enum Type { Simple, Super, Special}; public int Value; public int avaIndex; private ParticleSystem pc ; private void Start() { pc = transform.GetChild(0).GetComponent(); } private void OnMouseDown() { if (type == Type.Special) { FindObjectOfType().EmitFaith(Value*woodSculpture_Buildings.WoodSculpture_to_FaithBuff, transform.position); // GameProcedureManager.Instance.FaithCount += Value*woodSculpture_Buildings.WoodSculpture_to_FaithBuff; } else { woodSculpture_Buildings.RemoveScuplture(this); StartCoroutine(ReleaseFaith(Value * woodSculpture_Buildings.WoodSculpture_to_FaithBuff)); StartCoroutine(FadeOut()); } } private IEnumerator ReleaseFaith(int count) { var emission = pc.emission; emission.rateOverTime = count; // 在1秒内均匀释放n个粒子 // 启动粒子系统 // pc.Play(); // yield return new WaitForSeconds(0.5f); // pc.Stop(); // 第2阶段:0.5秒内均匀增加x的值 float xIncreaseInterval = 0.5f / 10; int incrementAmount = count / 10; for (int i = 0; i < 10; i++) { FindObjectOfType().EmitFaith(incrementAmount, transform.position); // GameProcedureManager.Instance.FaithCount += incrementAmount; yield return new WaitForSeconds(xIncreaseInterval); } Destroy(gameObject); } private IEnumerator FadeOut() { SpriteRenderer sr = GetComponent(); float elapsedTime = 0f; Color originalColor = sr.color; // 逐渐淡化 while (elapsedTime < 0.5f) { elapsedTime += Time.deltaTime; float alpha = Mathf.Lerp(1f, 0f, elapsedTime / 0.5f); sr.color = new Color(originalColor.r, originalColor.g, originalColor.b, alpha); yield return null; } // 等待0.5秒 yield return new WaitForSeconds(1f); // 销毁对象 Destroy(gameObject); } }