不同屏幕尺寸的Unity touch增量位置不正确

时间:2018-08-02 08:20:07

标签: c# android ios unity3d touch

我是C#Unity的新手,我刚刚学到了一些入门知识, 我正在制作一个简单的带有触摸增量的2D触摸控件,以在屏幕上的任何位置平移GameObject和“带有Touch的游戏对象”,并拖动其沿触摸方向移动而不是“触摸位置”。

例如Rise Up 2D Game Like控件,其中Sphere通过触摸拖动来控制。

但是问题是当我在不同的屏幕尺寸上进行测试时,翻译或触摸速度不同。

如果屏幕尺寸较小,例如640x800,则触摸速度会变慢。

如果屏幕尺寸很大,例如1440x2560,则触摸速度很快。

这是我正在使用的示例代码。

    private Touch firstTouch;
    public Vector3 dragDistance;
    private Vector3 StopDrag;
    public Transform player;

    void FixedUpdate () {
        if (Input.touchCount > 0)
        {    firstTouch = Input.GetTouch(0);
                if (Input.GetTouch(0).phase == TouchPhase.Moved)
            {
                dragDistance = firstTouch.deltaPosition;
                player.transform.Translate(dragDistance / 100 );
            }
                if (Input.GetTouch(0).phase == TouchPhase.Stationary)
            {
                dragDistance = StopDrag ;
            }}}

非常抱歉我的英语不好

3 个答案:

答案 0 :(得分:1)

如果我正确理解了您的问题,那么解决该问题的方法就是更改线路

    dragDistance = firstTouch.deltaPosition;

    Vector2 dragDistanceUnscaled = firstTouch.deltaPosition;
    dragDistance = new Vector2(dragDistanceUnscaled.x / Screen.Width,
                               dragDistanceUnscaled.y / Screen.Height)

此外,至少就我所知,您只需要Vector2即可,而对于dragDistance则不需要Vector3

答案 1 :(得分:0)

尝试将FixedUpdate()更改为Update()。它应该可以工作

答案 2 :(得分:0)

问题在这一行: player.transform.Translate(dragDistance / 100);

'100'值是相对于设备本身的帧速。 因此,修复应使用Time.deltaTime *值。 其中value可以是任何浮点数,例如100。 这样,无论设备质量高低,预期的转换都将是相同的。