【问题标题】:Unity touch delta position incorrect with different screen sizesUnity touch delta位置不正确,屏幕尺寸不同
【发布时间】:2018-08-02 08:20:07
【问题描述】:

我是 C# Unity 的新手,我刚刚学到了一些东西来开始和 我正在制作一个简单的带有触摸增量的 2D 触摸控件,以在屏幕上的任意位置使用触摸来翻译游戏对象,然后拖动以沿着触摸方向移动不要触摸位置。

例如 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 ;
            }}}

提前感谢我的英语不好

【问题讨论】:

    标签: c# android ios unity3d touch


    【解决方案1】:

    如果我正确理解您的问题,解决您的问题的方法是换行

        dragDistance = firstTouch.deltaPosition;
    

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

    另外,至少据我所知,您只需要一个Vector2,而不需要一个Vector3 来表示dragDistance。

    【讨论】:

    • 本尼迪克塔斯干得好
    【解决方案2】:

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

    “100”值与设备本身的帧速有关。 所以,修复应该是使用 Time.deltaTime * 值。 其中 value 可以是任何浮点数,例如 100。 有了这个,任何设备的预期转换都是相同的,无论它是高质量还是低质量。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-10-06
        • 2013-01-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-05-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多