2017-12-02 14 views
1

私はUnityでPaintに似たようなものを作ろうとしています。 ズームイン/ズームアウト機能を追加したいと思います。この目的のために、ペイント領域をScrollRectに追加し、マウスホイールイベントでペイント領域のlocalScaleを変更しました。ユニティUIのズームイン/ズームアウト、スクロール位置の調整

var scrollDelta = Input.GetAxis("Mouse ScrollWheel"); 
var scale = _editableArea.localScale.x + scrollDelta; 
_editableArea.localScale = new Vector3(scale, scale, scale); 

追加チェックもありますが、省略します。

今のところ私はスクロールバーの位置を調整しようとしています。そのため、ズームマウスは以前と同じ要素の下にあります。そして... 私はスクロールバーの新しい位置を計算するために数式をつかんだ。おそらく、私は車輪を再発明しており、すでにUnityのネイティブ関数によってこれを行う方法があります。私を正しい方法で見せてもらえますか?私は最終的に作用溶液に来ました

おかげ

答えて

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); 
関連する問題