如何根据屏幕的宽度/高度计算灵敏度?

时间:2018-01-21 18:25:11

标签: unity3d

这是我的想法:我想要一个滚动视图,用户可以在其中滚动组件,点击它。

经过数小时的测试/搜索,我终于设法使用以下代码。

我的问题在于比较Math.Abs(eventData.delta.x) > 1.0f。我认为如果鼠标“移动超过1.0f”则会拖动,否则我认为这是一次点击。

1.0f 可以完美地在所有设备上使用鼠标=轻松 移动,以及大屏幕(平板电脑),当你点击。但是在智能手机上,即我的Galaxy S6或我试过的其他3款手机,它非常敏感,几乎不可能点击。

你怎么能以编程方式处理这个?是否有DPI或其他事项需要考虑并基于此,将我的 1.0f 乘以决议?

public class BoardHandler : EventTrigger
{
    private static GameObject _itemDragged;
    private static bool _isDragging;
    private static ScrollRect _scrollRect;

    public override void OnPointerClick(PointerEventData data)
    {
        if (_isDragging) {
            return;
        }
        Debug.Log("Click");
    }
    public override void OnBeginDrag(PointerEventData eventData)
    {
        if (Math.Abs(eventData.delta.x) > 1.0f ||
            Math.Abs(eventData.delta.y) > 1.0f) {
            _scrollRect.OnBeginDrag(eventData);
            _isDragging = true;
        }
    }
    public override void OnDrag(PointerEventData eventData)
    {
        if (_isDragging) {
            _scrollRect.OnDrag(eventData);
        }
    }
    public override void OnEndDrag(PointerEventData eventData)
    {
        if (!_isDragging) {
            return;
        }
        _scrollRect.OnEndDrag(eventData);
        _isDragging = false;
    }

    private void Start()
    {
        _scrollRect = GetComponentInParent<ScrollRect>();
    }
}

1 个答案:

答案 0 :(得分:0)

我过去曾使用过TouchScript来覆盖一个项目中的多个设备,例如从9个屏幕6k屏幕阵列到平板电脑。他们有一组实用程序来处理多个分辨率和dpi。

查看TouchManagerInstance中的UpdateResolution方法。

第h