我的環境配置:Windows 10、Unity 5.3.4f1。
 
 
不曉得大家在使用 UGUI 的 Scroll View 時,是否曾發生捲動會亂跳的問題?
 
其實 Scroll View 是使用 IBeginDragHandlerIDragHandlerIEndDragHandler 這三個 interface 來處理觸碰事件的。而問題就是出在這三個 interface 所回傳的 PointerEventData
 
如果使用者是使用單點觸碰或者滑鼠的話,那 PointerEventData position 就是 Input.touchs[0].position,所以這邊不會有問題。
 
但使用者若是使用多點觸碰的話,則 PointerEventData position 就有可能為 Input.touchs[0].positionInput.touchs[1].position......Input.touchs[N].position,N 為任意數。
 
這就是導致 Scroll View 捲動出現亂跳的原因!
 
所以這邊我們需要繼承 ScrollRect 並且覆寫觸碰事件,強制將回傳的 position 進行修正,就可以排除該問題的發生!
 
PS:Input.mousePosition 與 Input.touches[ 0 ].position 這兩個值是一樣的!
 
大家可以建立一個腳本,直接複製貼上並且修改 Class 名稱,或者文章最下方也有腳本可以直接下載使用
 
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;


/// <summary>
/// 該腳本繼承了 UGUI 的 ScrollRect, 並且覆寫了捲動相關事件, 
/// 排除多點觸碰時, 會造成捲動功能異常的問題. 
/// </summary>
public class MyScrollView : ScrollRect
{
    public override void OnBeginDrag( PointerEventData eventData )
    {
        eventData.position = Input.mousePosition;

        // 或者以下方法也可以! 
        // Input.mousePosition 與 Input.touches[ 0 ].position 是一樣意思的. 
        // eventData.position = Input.touches[ 0 ].position;

        base.OnBeginDrag( eventData );
    }

    public override void OnDrag( PointerEventData eventData )
    {
        eventData.position = Input.mousePosition;

        // 或者以下方法也可以! 
        // Input.mousePosition 與 Input.touches[ 0 ].position 是一樣意思的. 
        // eventData.position = Input.touches[ 0 ].position;

        base.OnDrag( eventData );
    }

    public override void OnEndDrag( PointerEventData eventData )
    {
        eventData.position = Input.mousePosition;

        // 或者以下方法也可以! 
        // Input.mousePosition 與 Input.touches[ 0 ].position 是一樣意思的. 
        // eventData.position = Input.touches[ 0 ].position;

        base.OnEndDrag( eventData );
    }

}
 
 
 
腳本使用方式,把腳本取代掉原本的 Scroll View 即可
image01.jpg
 
 
這邊也有提供範例,可以供大家測試與參考,下載範例後,將範例安裝到行動裝置上,並且試著用 "兩根以上手指" 去滑動 Scroll View 看看!測試兩個 Scroll View 有什麼不同?
 
 
 
arrow
arrow
    文章標籤
    Unity C# UGUI Scroll View
    全站熱搜

    岳 發表在 痞客邦 留言(0) 人氣()