IEnumerator ComboAnimation(ScInt combo) { var obj = Instantiate(ComboEffectPrefab, transform.parent, false).GetComponent <ComboEffect>(); var position = obj.transform.position; Sprite[] numSprite = null; Vector2 size = new Vector2(); var level = combo / 10; switch (level.ToInt()) { case 0: numSprite = ComboNumL1; size.x = 35; size.y = 46; break; case 1: numSprite = ComboNumL2; size.x = 35; size.y = 46; break; case 2: numSprite = ComboNumL3; size.x = 35; size.y = 46; break; case 3: numSprite = ComboNumL4; size.x = 44; size.y = 57; break; case 4: numSprite = ComboNumL5; size.x = 44; size.y = 57; break; case 5: numSprite = ComboNumL6; size.x = 47; size.y = 67; break; default: numSprite = ComboNumL6; size.x = 47; size.y = 67; break; } size.x *= 1.5f; size.y *= 1.5f; var nums = new List <int>(); while (combo > 0) { nums.Add(combo % 10); combo /= 10; } nums.Reverse(); var comboPos = obj.ComboText.rectTransform.anchoredPosition; // 139x39 for (var idx = 0; idx < nums.Count; idx++) { var elem = obj.PlaceHolder[idx].GetComponent <Image>(); elem.sprite = numSprite[nums[idx]]; elem.rectTransform.sizeDelta = size; elem.rectTransform.anchoredPosition = new Vector3( comboPos.x - (80 + (size.x - 3) * (nums.Count - idx)), comboPos.y ); elem.enabled = true; } obj.ComboText.enabled = true; const float duration = 0.65f; const float shift = 0.7f; var currentTime = 0f; while (currentTime < duration) { var alpha = Mathf.Lerp(1f, 0f, currentTime / duration); foreach (var num in obj.PlaceHolder) { var tmpColor = num.GetComponent <Image>().color; tmpColor.a = alpha; num.GetComponent <Image>().color = tmpColor; } var color = obj.ComboText.color; color.a = alpha; obj.ComboText.color = color; obj.transform.position = new Vector3( position.x, position.y + shift * (1f - alpha), position.z); currentTime += Time.deltaTime; yield return(null); } foreach (var num in obj.PlaceHolder) { num.GetComponent <Image>().enabled = false; } obj.ComboText.enabled = false; obj.enabled = false; Destroy(obj.gameObject); yield break; }
public void Play(ScInt combo) { StartCoroutine(nameof(ComboAnimation), combo); }