【发布时间】:2021-06-23 23:59:09
【问题描述】:
我正在 Unity 中编写一个自定义编辑器窗口,我希望能够在其中滚动进/出并拖动视图。为此,我将GUI.matrix 设置为Matrix4x4.TRS(offset, Quaternion.identity, Vector3.one * scale),我可以控制offset 和scale。这很好用,除非在滚动进/出时,它会锚定窗口的左上角。 我希望它锚定在鼠标的位置。
如果这只需要在缩放时更改偏移量,那就太好了 - 我只是不确定这里的偏移量应该是多少。 Matrix4x4s 超出了我的数学舒适区。
这是我目前处理缩放的方式:
if (Event.current.type == EventType.ScrollWheel)
{
_scale *= Math.Sign(Event.current.delta.y) == 1 ? 1.1f : 1f / 1.1f;
_offset += Math.Sign(Event.current.delta.y) * /*What do I put here?*/;
}
【问题讨论】:
-
我得到的最接近的方法是在更改比例之前和之后乘以光标的位置(使用
Matrix.MultiplyPoint(v3)),然后从偏移量中减去after - before。这是显示结果的gif。注意内容是如何在光标上方稍微移动而不是无限接近它。 -
当您尝试此操作时,您是否也更改了
_offset,如问题所示,或者您是否离开了那部分?另外,v3在世界空间吗? -
@NicoSchertler 为了澄清我的尝试,我确实更改了偏移量。在更改比例之前和之后,我通过变换矩阵运行鼠标的位置。然后我从 _offset 中减去结果之间的差异。这就是给了我最接近的选项,如 gif 所示。在这种情况下,v3 是鼠标的位置(相对于窗口)。
-
我认为我遇到的很多麻烦都源于我所拥有的值与屏幕相关、相对于矩形(窗口)、包含 _scale 和包含 _offset 的混淆.发生的事情太多了,有点不知所措。
标签: c# unity3d math unity-editor unity-ui