public void SendDamage()
    {
        Character[] enemys = Object.FindObjectsOfType <Character>();

        if (enemys == null)
        {
            return;
        }

        foreach (var e in enemys)
        {
            if (e == Owner)
            {
                continue;
            }
            float angle = Mathf.Acos(Vector3.Dot((e.transform.position - Owner.transform.position).normalized, Owner.transform.forward))
                          * Mathf.Rad2Deg;
            if ((Owner.transform.position - e.transform.position).magnitude <= Isometric.IsometricTileSize.x * 1.8f &&
                angle < 80f)
            {
                e.AddState(new CharacterHitState(e, Owner.Status.CurrentDamage, 0.1f).Init());

                float zAngle = -1 * AnimUtil.GetRenderAngle(e.transform.rotation) + 45f - 15f;

                IsoParticle.CreateParticle("Sliced1", e.transform.position
                                           + new Vector3(0f, Isometric.IsometricTileSize.y * 0.5f, 0f),
                                           zAngle);
                IsoParticle.CreateParticle("Sliced2", e.transform.position
                                           + new Vector3(0f, Isometric.IsometricTileSize.y * 0.5f, 0f),
                                           angle + 90f);
            }
        }
    }
    private void Update()
    {
        if (RangeType != CardRangeType.E_None && IsVisible)
        {
            if (RangeType == CardRangeType.E_PlayerRelativeCircularSector)
            {
                transform.position = Player.CurrentPlayer.transform.position + Vector3.down * Isometric.IsometricGridSize;

                int newAngle = AnimUtil.GetRenderAngle(Player.CurrentPlayer.transform.rotation);
                if (newAngle != CurrentAngle || NeedUpdate)
                {
                    CurrentAngle = newAngle;
                    UpdateSprite();
                    NeedUpdate = false;
                }
            }
            else if (RangeType == CardRangeType.E_PlayerRelativeCircle)
            {
                transform.position = Player.CurrentPlayer.transform.position + Vector3.down * Isometric.IsometricGridSize;
                if (NeedUpdate)
                {
                    UpdateSprite();
                    NeedUpdate = false;
                }
            }
            else if (RangeType == CardRangeType.E_PointCircle)
            {
                transform.position = CurrentPoint + Vector3.down * Isometric.IsometricGridSize;
                if (NeedUpdate)
                {
                    UpdateSprite();
                    NeedUpdate = false;
                }
            }
            Renderer.enabled = true;
        }
        else
        {
            Renderer.enabled = false;
            NeedUpdate       = true;
        }
    }