IEnumerator Transform() { if (beastPrefab == null || beastPrefab is Object && beastPrefab.Equals(null)) { yield break; } // transform to beast var beast = Instantiate <Beast>(beastPrefab, transform.position, Quaternion.identity); var beastRenderer = beast.GetComponent <SpriteRenderer>(); // hidden for caching beastRenderer.enabled = false; // hidden the current sprite. _renderer.enabled = false; // active transformed effect. if (_boomEffectPrefab != null && _boomEffectPrefab is Object && !_boomEffectPrefab.Equals(null)) { var boomFx = Instantiate <Animator>(_boomEffectPrefab, transform.position, Quaternion.identity); boomFx.gameObject.SetActive(true); var tranformLength = boomFx.GetCurrentAnimatorStateInfo(0).length; Destroy(boomFx.gameObject, tranformLength); if (_waitForEffect) { yield return(new WaitForSeconds(tranformLength)); } } // assure the beast must be actived. beast.gameObject.SetActive(true); // shown the beast after done. beastRenderer.enabled = true; Destroy(gameObject); }