static public void DrawRect(Vector3 position, Rect rect)
    {
        Vector3 p0 = LightingPosition.GetPosition3DWorld(new Vector2(rect.x, rect.y), position);
        Vector3 p1 = LightingPosition.GetPosition3DWorld(new Vector2(rect.x + rect.width, rect.y), position);
        Vector3 p2 = LightingPosition.GetPosition3DWorld(new Vector2(rect.x + rect.width, rect.y + rect.height), position);
        Vector3 p3 = LightingPosition.GetPosition3DWorld(new Vector2(rect.x, rect.y + rect.height), position);

        Gizmos.DrawLine(p0, p1);
        Gizmos.DrawLine(p1, p2);
        Gizmos.DrawLine(p2, p3);
        Gizmos.DrawLine(p3, p0);
    }
    static public void DrawPolygon(Polygon2D polygon, Vector3 position)
    {
        Vector3 a = Vector3.zero;
        Vector3 b = Vector3.zero;

        for (int i = 0; i < polygon.pointsList.Count; i++)
        {
            Vector2D p0 = polygon.pointsList[i];
            Vector2D p1 = polygon.pointsList[(i + 1) % polygon.pointsList.Count];

            a = LightingPosition.GetPosition3DWorld(p0.ToVector2(), position);
            b = LightingPosition.GetPosition3DWorld(p1.ToVector2(), position);

            Gizmos.DrawLine(a, b);
        }
    }
    static public void DrawPolygon(Polygon2 polygon, Vector3 position)
    {
        Vector3 a = Vector3.zero;
        Vector3 b = Vector3.zero;

        for (int i = 0; i < polygon.points.Length; i++)
        {
            Vector2 p0 = polygon.points[i];
            Vector2 p1 = polygon.points[(i + 1) % polygon.points.Length];

            a = LightingPosition.GetPosition3DWorld(p0, position);
            b = LightingPosition.GetPosition3DWorld(p1, position);

            Gizmos.DrawLine(a, b);
        }
    }