//ターゲット取得
    protected override Vector2 GetTarget(InputStatus input)
    {
        Vector2 direction = input.GetStartPoint() - input.GetEndPoint();
        Vector2 target    = direction + Common.FUNC.ParseVector2(myTran.position);

        return(target);
    }
    //目標ポイント取得
    protected virtual Vector2 GetTarget(InputStatus input)
    {
        Vector2 target = input.GetPoint();

        if (isDrag)
        {
            Vector2 direction = input.GetStartPoint() - input.GetEndPoint();
            target = direction + Common.FUNC.ParseVector2(myTran.position);
        }
        return(target);
    }
    //発射
    public override GameObject Fire(InputStatus input)
    {
        Vector2    start          = input.GetStartPoint();
        Vector2    end            = input.GetEndPoint();
        float      borderAngleAbs = Mathf.Abs(borderAngle);
        float      dx             = end.x - start.x;
        float      dy             = end.y - start.y;
        float      rad            = Mathf.Atan2(dy, dx);
        float      angle          = rad * Mathf.Rad2Deg;
        GameObject obj            = null;

        if (Mathf.Abs(angle) <= borderAngleAbs || 180 - Mathf.Abs(angle) <= borderAngleAbs)
        {
            if (frontWeaponCtrl != null)
            {
                obj = frontWeaponCtrl.Fire(input);
            }
        }
        else
        {
            if ((angle > 0 && !isDrag) || (angle < 0 && isDrag))
            {
                if (upwardWeaponCtrl != null)
                {
                    obj = upwardWeaponCtrl.Fire(input);
                }
            }
            else
            {
                if (underWeaponCtrl != null)
                {
                    obj = underWeaponCtrl.Fire(input);
                }
            }
        }
        return(obj);
    }
    //発射
    public override GameObject Fire(InputStatus input)
    {
        index++;
        UseMp();

        Vector2 startPoint = input.GetStartPoint();
        Vector2 endPoint   = input.GetEndPoint();
        Vector2 spawnPoint = (startPoint + endPoint) / 2;
        float   length     = (startPoint - endPoint).magnitude;

        if (length > maxLength)
        {
            length = maxLength;
        }
        else if (length < minLength)
        {
            length = minLength;
        }
        Quaternion q   = Quaternion.LookRotation(Vector3.back, startPoint - endPoint);
        GameObject obj = Spawn(spawn, spawnPoint, q);

        obj.transform.localScale = new Vector2(1, length);
        return(obj);
    }