unityUI缩放in/out,调整滚动位置
Unity UI zoom in/out, adjust scroll position
我正在尝试在 Unity 中制作类似于 Paint 的东西。
我想添加缩放功能 in/out。为此,我将绘画区域添加到 ScrollRect
中,并在鼠标滚轮事件中更改了绘画区域 localScale
。
var scrollDelta = Input.GetAxis("Mouse ScrollWheel");
var scale = _editableArea.localScale.x + scrollDelta;
_editableArea.localScale = new Vector3(scale, scale, scale);
还有额外的检查,但我忽略了它们。
现在我正在尝试调整滚动条的位置,因此缩放后鼠标将位于与之前相同的元素下。和...
我坚持使用公式来计算滚动条的新位置。可能,我重新发明了轮子,并且已经有一种方法可以通过 Unity 中的本机函数来做到这一点。你能告诉我正确的方法吗?
谢谢
我终于找到了可行的解决方案,希望它能对某人有所帮助:
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);
我正在尝试在 Unity 中制作类似于 Paint 的东西。
我想添加缩放功能 in/out。为此,我将绘画区域添加到 ScrollRect
中,并在鼠标滚轮事件中更改了绘画区域 localScale
。
var scrollDelta = Input.GetAxis("Mouse ScrollWheel");
var scale = _editableArea.localScale.x + scrollDelta;
_editableArea.localScale = new Vector3(scale, scale, scale);
还有额外的检查,但我忽略了它们。
现在我正在尝试调整滚动条的位置,因此缩放后鼠标将位于与之前相同的元素下。和... 我坚持使用公式来计算滚动条的新位置。可能,我重新发明了轮子,并且已经有一种方法可以通过 Unity 中的本机函数来做到这一点。你能告诉我正确的方法吗?
谢谢
我终于找到了可行的解决方案,希望它能对某人有所帮助:
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);