四角形内の任意の点のUVを求める方法

    // 線形補間
    private Vector2 Lerp(Vector2 start, Vector2 end, float t)
    {
        return start + t * (end - start);
    }

    // 四角形内の点のUV座標を計算
    public Vector2 CalculateUV(Vector2 A, Vector2 B, Vector2 C, Vector2 D, Vector2 E)
    {
        // 辺ABとCDに沿った補間
        Vector2 AB = B - A;
        Vector2 DC = C - D;
        float tAB = Vector2.Dot(E - A, AB) / AB.sqrMagnitude;
        float tDC = Vector2.Dot(E - D, DC) / DC.sqrMagnitude;
        Vector2 AB_E = Lerp(A, B, tAB);
        Vector2 DC_E = Lerp(D, C, tDC);

        // 辺ADとBCに沿った補間
        Vector2 AD = D - A;
        Vector2 BC = C - B;
        float tAD = Vector2.Dot(E - A, AD) / AD.sqrMagnitude;
        float tBC = Vector2.Dot(E - B, BC) / BC.sqrMagnitude;
        Vector2 AD_E = Lerp(A, D, tAD);
        Vector2 BC_E = Lerp(B, C, tBC);

        // 辺に沿った補間からUV座標を計算
        float u = (E - AB_E).magnitude / (DC_E - AB_E).magnitude;
        float v = (E - AD_E).magnitude / (BC_E - AD_E).magnitude;

        // 最終的なUV座標を算出
        return new Vector2(u, v);
    }