RectTransform corners and offsetmax/min

Hi,

I’m trying to edit corners position of a recttransform (a window), catching corners and resize it depending of the touch movements.

GetCorners allow me to acces them but not edit them.
So i’m currently using offset max and min depending on wich corner i grab with touch.
It’s working fine as long as the widow is not rotated.

When the window is given a rotation (only on 90/180/270 degrees) each edges doesn’t correspond to the right offset.

I’ve tried to set rotation to 0 make my changes and retrieve the rotation but it’s not working.

So i’m trying to get a reference(or pointers in unsafe mode) of wich offset i should change depending on the rotation but ,and there is my trouble, recttransform.offsetMax/Min aren’t variables but properties and i can’t find a way to store a ref on them and not get the vector.

Code for not rotated window (working fine) :

        RectTransform rectTransform = transform as RectTransform;
       
        switch (data.m_EventID)
        {

            //Topleft
            case TARGETID.One:

                rectTransform.offsetMin += new Vector2(data.delta.x, 0);
                rectTransform.offsetMax += new Vector2(0, data.delta.y);

                break;
            //TopRight
            case TARGETID.Two:

                rectTransform.offsetMax += new Vector2(data.delta.x, 0);
                rectTransform.offsetMax += new Vector2(0, data.delta.y);

                break;
            //BotRight
            case TARGETID.Three:

                rectTransform.offsetMax += new Vector2(data.delta.x, 0);
                rectTransform.offsetMin += new Vector2(0, data.delta.y);

                break;
            //BotLeft
            case TARGETID.Four:
               
                rectTransform.offsetMin += new Vector2(data.delta.x, 0);
                rectTransform.offsetMin += new Vector2(0, data.delta.y);

                break;
        }
       

        LayoutRebuilder.ForceRebuildLayoutImmediate(rectTransform);

Disabling rotation, resizing, reset rotation :

        RectTransform rectTransform = transform as RectTransform;

        Quaternion rot = transform.rotation;
       
        rectTransform.rotation = Quaternion.Euler(0, 0, 0);
       
        LayoutRebuilder.ForceRebuildLayoutImmediate(rectTransform);
       
        switch (data.m_EventID)
        {

            //Topleft
            case TARGETID.One:


                rectTransform.offsetMin += new Vector2(data.delta.x, 0);
                rectTransform.offsetMax += new Vector2(0, data.delta.y);


                break;
            //TopRight
            case TARGETID.Two:

                rectTransform.offsetMax += new Vector2(data.delta.x, 0);
                rectTransform.offsetMax += new Vector2(0, data.delta.y);

                break;
            //BotRight
            case TARGETID.Three:

                rectTransform.offsetMax += new Vector2(data.delta.x, 0);
                rectTransform.offsetMin += new Vector2(0, data.delta.y);
                break;
            //BotLeft
            case TARGETID.Four:

                rectTransform.offsetMin += new Vector2(data.delta.x, 0);
                rectTransform.offsetMin += new Vector2(0, data.delta.y);

                break;
        }
       
       
        rectTransform.rotation = rot;

        LayoutRebuilder.ForceRebuildLayoutImmediate(rectTransform);

And this is what i tried to keep a ref on these properties :

        unsafe
        {
            fixed (Vector2* v = &(rectTransform.offsetMax))
            {

            }


            void* test = (void*)&(rectTransform.offsetMax);
        }

        ref Vector2 testref = ref (rectTransform.offsetMax);

Is there a way to get a ref on properties or maybe edit corners more easely, or will i have to manage each rotation in brut-code ?

Thanks for reading me and i apologize for my english ^^’

Here is a bit of code for disabling rotation,resizing, reset rotation :

RectTransform rectTransform = transform as RectTransform;


        Vector2 delta = (data.delta);

        Quaternion rot = transform.rotation;

        Quaternion counterrot = Quaternion.FromToRotation(rectTransform.rotation.eulerAngles,Vector3.zero );

        rectTransform.rotation = Quaternion.Euler(0, 0, 0);

        delta = counterrot * delta;

        LayoutRebuilder.ForceRebuildLayoutImmediate(rectTransform);
      

        switch (data.m_EventID)
        {
            //Topleft
            case TARGETID.One:
              
                rectTransform.offsetMin += new Vector2(delta.x, 0);
                rectTransform.offsetMax += new Vector2(0, delta.y);


                break;
            //TopRight
            case TARGETID.Two:

                rectTransform.offsetMax += new Vector2(delta.x, 0);
                rectTransform.offsetMax += new Vector2(0, delta.y);

                break;
            //BotRight
            case TARGETID.Three:

                rectTransform.offsetMax += new Vector2(delta.x, 0);
                rectTransform.offsetMin += new Vector2(0, delta.y);

                break;
            //BotLeft
            case TARGETID.Four:

                rectTransform.offsetMin += new Vector2(delta.x, 0);
                rectTransform.offsetMin += new Vector2(0, delta.y);

                break;
        }

        LayoutRebuilder.ForceRebuildLayoutImmediate(rectTransform);
        rectTransform.rotation = rot;

        LayoutRebuilder.ForceRebuildLayoutImmediate(rectTransform);

with a little capture :

athletictepidafricanharrierhawk

I know i can make it work but i’d like to understand with this solution won’t.