public IEnumerator CoFire(int damage, Vector3 start, Vector3 end, TacticsUnitController targetUnit, bool isTargetDead, 
            TacticsBattleSceneManager.CreateDamageTextDelegate CreateDamageFunction)
        {
            const float speed = 0.5f;
            float timePrev = 0f;
            float accTime = 0f;

            Vector3 startPos = transform.position;
            float distance = (end - start).magnitude;
            float needTime = distance / speed;

            Animator.Triger(UnitAnimatorController.PARAM_DAMAGED_ATTACK_RANGED);
            yield return new WaitForSeconds(0.7f);

            var mage = this.transform.FindChild("Mage(Clone)").GetComponent<MageModel>();

            var ball = (GameObject)GameObject.Instantiate(ResourceManager.Instance.Load(Define.Path.Effects.Fireball));
            yield return Coroutine_.Action.LerpMove(ball,
                mage.RightFinger.transform.position,
                //start + new Vector3(0f, 0.5f, 0f),
                end + new Vector3(0f, 0.5f, 0f),
                needTime);

            CreateDamageFunction(damage, end);

            GameObject.Destroy(ball);

            Act.Util.EffectPlayOneShot(ResourceManager.Instance.Load(Define.Path.Effects.Explosion), end);

            if (isTargetDead)
            {
                targetUnit.Animator.Triger(UnitAnimatorController.PARAM_DAMAGED_DEATH);
            }
            else
            {
                targetUnit.Animator.Triger(UnitAnimatorController.PARAM_DAMAGED_TRIGER);
            }

            /*

            while (accTime < needTime)
            {
                this.transform.position = Vector3.Lerp(start, end, accTime / needTime);
                yield return null;

                if (timePrev != 0f)
                {
                    accTime += Time.time - timePrev;
                    animator.SetSpeed(1f);
                }

                timePrev = Time.time;
            }
                    animator.SetSpeed(0f);*/
        }
        public IEnumerator CoMelee(int damage, TacticsUnitController targetUnit, bool isTargetDead,
            TacticsBattleSceneManager.CreateDamageTextDelegate CreateDamageFunction)
        {
            Animator.Triger(UnitAnimatorController.PARAM_DAMAGED_ATTACK_MELEE);

            yield return new WaitForSeconds(0.9f);

            if (unitType == TacticsBG.Unit.Type.Mage)
            {
                Act.Util.EffectPlayOneShot(ResourceManager.Instance.Load(Define.Path.Effects.MeleeFire), targetUnit.transform.position);
            }

            CreateDamageFunction(damage, targetUnit.transform.position);

            if (isTargetDead)
            {
                targetUnit.Animator.Triger(UnitAnimatorController.PARAM_DAMAGED_DEATH);
            }
            else
            {
                targetUnit.Animator.Triger(UnitAnimatorController.PARAM_DAMAGED_TRIGER);
            }
        }