private IEnumerator PlayRoutine(EffectConfig cfg) { var animObject = Instantiate(this.gameObject); var fx = animObject.GetComponent <EffectManager>(); var fxAnim = fx.GetComponent <Animator>(); var offsetv = cfg.offset; fxAnim.Play(cfg.animationName); if (cfg.attachToSprite) { animObject.transform.SetParent(cfg.targetTransform); } if (cfg.flip) { TransformUtils.Flip(animObject.transform); } if (cfg.align == EffectAlign.CENTER) { animObject.transform.position = cfg.targetTransform.position + offsetv; } else if (cfg.align == EffectAlign.BOTTOM) { var trans = cfg.targetTransform; var targetObjectSprite = trans.Find("Animation").GetComponent <SpriteRenderer>(); var animationSprite = animObject.GetComponent <SpriteRenderer>(); var spriteBottom = trans.position.y - targetObjectSprite.bounds.size.y / 2; animObject.transform.position = new Vector3(trans.position.x, spriteBottom) + offsetv; } yield return(new WaitForSeconds(GetClip(cfg.animationName).length)); Destroy(animObject); }