首先我們直覺一點來考慮移動這件事,目前我們已經有了開始位置startPos和當前位置nowPos,那只要把這兩點距離算出來,就有一個數值可以作為移動量值。
開啟Controller腳本,在dragState = true;後加入以下程式碼:
float dis = Vector2.Distance(nowPos, startPos); Vector2 dir = (nowPos - startPos).normalized; actor.Translate(new Vector2(dis * dir.x, dis * dir.y) * speed); Debug.Log(new Vector2(dis * dir.x, dis * dir.y) * speed);float變數dis為nowPos到startPos的距離,接著用兩點距離的normalized數值作為方向並帶入變數dir,最後將 dis * dir * speed的數值帶入actor.Translate就完成目前的移動,可以用Debug.Log看看目前移動的數值。(這裡的speed是一個全域float變數,數值0.1f)
編譯後可以執行看看結果,應該會像這樣稍微移動一下就跑超遠:
當然我們可以透過調整speed來解決這個問題,但這裡要注意另一件事,目前我們使用的移動數值,是startPos到nowPos的距離,這代表滑鼠就算拖曳同樣的距離,在Canvas寬高不同時結果也會不同。
所以不管Canvas寬高是多少,我們都把距離轉換為0到1:
開啟Controller腳本,新增函式SetDistance,以Canvas的寬高為底,將兩點距離調整為0到1:
float SetDistance(Vector2 nowPos, Vector2 startPos) { Vector2 temp = nowPos - startPos; temp = new Vector2(temp.x / canvasRect.sizeDelta.x, temp.y / canvasRect.sizeDelta.y); float dis = Vector2.Distance(temp, Vector2.zero); return dis; }將前面的float dis = Vector2.Distance(nowPos, startPos);改為:
float dis = SetDistance(nowPos, startPos);這樣我們就解決了同比例不同寬高的移動距離,移動速度就靠改變speed來調整。
另外在Canvas寬高不同比例的情況時,上述的做法並不合適,但目前並沒有去考慮要如何做,所以這個問題就先放一邊,這次就到這裡。
沒有留言:
張貼留言