public Rect VisibleRect(Camera camera)
    {
        VisibleArea va = MapLayout.CalcRelativeVisibleArea(camera);

        return(new Rect(camera.transform.localPosition.x - va.farHalfWidth,
                        camera.transform.localPosition.z + va.near,
                        va.farHalfWidth * 2f,
                        va.far - va.near));
    }
    public void MoveCamera(Vector3 newPos)
    {
        Vector3 prePos = MapCamera.transform.localPosition;

        MapCamera.transform.localPosition = newPos;

        MapLayout.VisibleArea va = MapLayout.CalcRelativeVisibleArea(MapCamera);

        float xMin = -OutRange;
        float xMax = Layout.HexTileWidth * MapConst.MAP_WIDTH + OutRange;
        float zMin = -OutRange;
        float zMax = Layout.HexTileHeight * MapConst.MAP_HEIGHT + OutRange;

        if (newPos.z + va.near < zMin)
        {
            newPos.z = zMin - va.near;
        }

        if (newPos.z + va.far > zMax)
        {
            newPos.z = zMax - va.far;
        }

        if (newPos.x - va.farHalfWidth < xMin)
        {
            newPos.x = xMin + va.farHalfWidth;
        }

        if (newPos.x + va.farHalfWidth > xMax)
        {
            newPos.x = xMax - va.farHalfWidth;
        }

        MapCamera.transform.localPosition = newPos;
        OnCameraMove(newPos, prePos);
    }