public void DoAlignToCanvas()
    {
        if (UseCamera.orthographic &&
            Mathfx.Approximately(UseCamera.orthographicSize, 0))
        {
            return;
        }

        var screenSize = GetGameViewSize();
        var bottomLeft = UseCamera.ScreenToWorldPoint(new Vector3(0, 0, UseCamera.nearClipPlane));
        var topRight   = UseCamera.ScreenToWorldPoint(new Vector3(screenSize.x, screenSize.y, UseCamera.farClipPlane));

        if (Boundaries == null)
        {
            return;
        }

        switch (HorizontalAlign)
        {
        case HorizontalAlignType.Left:
            _offsetX = bottomLeft.x + transform.lossyScale.x * (-Boundaries.center.x + Boundaries.size.x / 2);
            break;

        case HorizontalAlignType.Right:
            _offsetX = topRight.x + transform.lossyScale.x * (-Boundaries.center.x - Boundaries.size.x / 2);
            break;

        case HorizontalAlignType.Center:
            _offsetX = (topRight.x + bottomLeft.x) / 2 + transform.lossyScale.x * -Boundaries.center.x;
            break;
        }

        switch (VerticalAlign)
        {
        case VerticalAlignType.Bottom:
            _offsetY = bottomLeft.y + transform.lossyScale.x * (-Boundaries.center.y + (Boundaries.size.y / 2));
            break;

        case VerticalAlignType.Top:
            _offsetY = topRight.y + transform.lossyScale.x * (-Boundaries.center.y - (Boundaries.size.y / 2));
            break;

        case VerticalAlignType.Center:
            _offsetY = (topRight.y + bottomLeft.y) / 2 + transform.lossyScale.x * -Boundaries.center.y;
            break;
        }

        transform.position = new Vector3(_offsetX, _offsetY, transform.position.z);
    }