我正在尝试制作类似于Unity中的Paint。
我想添加放大/缩小功能。为此,我在ScrollRect
中添加了绘制区域,并在鼠标滚轮事件中更改了绘制区域的localScale
。
var scrollDelta = Input.GetAxis("Mouse ScrollWheel");
var scale = _editableArea.localScale.x + scrollDelta;
_editableArea.localScale = new Vector3(scale, scale, scale);
还有其他检查,但我省略了它们。
现在我正在尝试调整滚动条的位置,因此缩放后鼠标将在之前的同一元素下。和... 我坚持使用公式来计算滚动条的新位置。也许,我重新发明轮子,已经有一种方法可以通过Unity中的本机功能来实现。你能告诉我正确的方法吗?
由于
答案 0 :(得分:0)
我终于找到了工作解决方案,希望它能帮助别人:
var scale = _editableArea.localScale.x;
//mousePosition contains position of mouse inside scaled area in percentages
var mousePosition = (Vector2) (Input.mousePosition - _editableArea.position) - _editableArea.rect.position * scale;
mousePosition.x /= _editableArea.rect.width * scale;
mousePosition.y /= _editableArea.rect.height * scale;
var contentSize = _scrollRect.content.rect;
var shiftX = -scaleDelta* contentSize.width * (mousePosition.x - 0.5f);
var shiftY = -scaleDelta* contentSize.height * (mousePosition.y - 0.5f);
var currPos = _scrollRect.content.localPosition;
_scrollRect.content.localPosition = new Vector3(currPos.x + shiftX, currPos.y + shiftY, currPos.z);