旋转后重新计算位置

时间:2018-01-05 15:55:11

标签: unity3d

我们假设我有一个像这样的用户界面Image

+-+     Width = 128
|A|     Height = 640
|B|     Anchors (0,0,0,0)
|C|     Pivot (0,0)
|D|     Rotation (0,0,0)
*-+     Scale (1,1,1)

请注意 * 是支点,它位于左下角。我想要使​​用轮换Image轮换此用户界面z = -90.0f。当我这样做时,我有一个这样的盒子:

       Width = 128
       Height = 640
       Anchors (0,0,0,0)
       Pivot (0,0)
       Rotation (0,0,-90)
*----+ Scale (1,1,1)
|DCBA|
+----+

请注意 * 是支点,而不是左下角,它位于左上角。从3D /数学的角度来看,一切都是合乎逻辑的......但不适合2D / Pixel的我。 我有两个问题:

  • 我的宽度= 128,高度= 640
  • * =轴心点现在位于左上角。

以下是我对最终职位的看法:

       Width = 640
       Height = 128
       Anchors (0,0,0,0)
+----+ Pivot (0,0)
|DCBA| Rotation (0,0,0)
*----+ Scale (1,1,1)

它位于" click"事件。这是我的代码:

public void OnPointerClick(PointerEventData eventData)
{
    if (MenuMain.ModeRotateIsActivated) {
        eventData.pointerPress.transform.Rotate(new Vector3(0f, 0f, -90f));
        /* maybe use / change rt after that?
        RectTransform boat_rt = 
            eventData.pointerPress.GetComponent<RectTransform>();
        */
    }
}

我可以做什么来修改对象位置+枢轴,就像我想要的那样?

1 个答案:

答案 0 :(得分:1)

你不能得到你想要的东西,因为你想:

  • 旋转图像
  • 翻译图片
  • 更新数据透视
  • 让检查员读取无旋转,无翻译,以0
  • 旋转

前三个中的每一个都与第四个互斥。

最好你可以执行前三个动作,然后将图像父级放到另一个空的GameObject中,该游戏对象位于正确的角上并且没有应用旋转。但它不会成为同一个对象,它将成为父对象。