Unity 中的 Touch Input 会记住最后一个位置

Posted

技术标签:

【中文标题】Unity 中的 Touch Input 会记住最后一个位置【英文标题】:Touch Input in Unity remembers the last position 【发布时间】:2021-07-27 11:20:49 【问题描述】:

所以,我正在尝试旋转一个对象。非常简单,一旦触摸屏幕,就会创建一个 Vector3,获取触摸位置,然后,当用户在屏幕上拖动手指时,它会进行计算以旋转对象。当用户将手指从屏幕上移开时,Vector3 被破坏,一切正常。

在编辑器上,它完美无缺。然而,在 android 设备上,感觉就像设备记住了最后被触摸的点在哪里。因此,用户第一次尝试旋转对象时没有问题,但如果他们想再次旋转它,脚本会计算用户最后点击的位置并旋转对象,就像用户一直拖动手指一样到新的位置。

这是有原因的吗? android设备是否存储触摸位置?如果是这样,有没有办法重置它?作为一个额外的问题,ios设备也会发生类似的事情吗?

编辑:代码。

bool topSide;
bool rightSide;
public float rotationSpeed;

void OnMouseDrag()

    if (Input.mousePosition.x > Screen.width / 2)
    
        rightSide = true;
    
    else
    
        rightSide = false;
    

    if (Input.mousePosition.y > Screen.height / 2)
    
        topSide = true;
    
    else
    
        topSide = false;
    

    if (rightSide)
    
        rot1 = Input.GetAxis("Mouse Y") * rotationSpeed * Mathf.Deg2Rad;
    
    else
    
        rot1 = -Input.GetAxis("Mouse Y") * rotationSpeed * Mathf.Deg2Rad;
    

    if (topSide)
    
        rot2 = -Input.GetAxis("Mouse X") * rotationSpeed * Mathf.Deg2Rad;
    
    else
    
        rot2 = Input.GetAxis("Mouse X") * rotationSpeed * Mathf.Deg2Rad;
    
    
    sundial.transform.localEulerAngles += new Vector3(0, 0, (rot1 + rot2) * rotationSpeed * Time.deltaTime);

    rot1 = 0;
    rot2 = 0;

【问题讨论】:

您仍然需要显示代码。 刚刚做了,我认为这无关紧要,抱歉。 安卓的触控在哪里? 【参考方案1】:

OnMouseDrag 函数可能仅适用于鼠标。我通常使用一些这样的代码来检测是否有东西被点击:

public void Update() 
            if(Input.GetMouseButtonDown(0) || Input.GetMouseButton(0)) 
                //raycast to object, check for collision
                //then find angle and store last position, and move the object
             else if(Input.GetMouseButtonUp(0)) 
                //erase last position and do whatever you do when the user picks up their finger
            
        

我知道这也是指鼠标按钮,但我到处都在使用它,它适用于移动/桌面平台。因此,如果您担心它是平台,请尝试使用该方法!

它还涉及到光线投射,您还没有这样做,但学习如何做到这一点非常值得!

【讨论】:

虽然它仍会短暂跳转到上一点,但您的解决方案确实效果更好。所以,我想,我的错误在别处,我需要先找到它。接受这是最佳解决方案,谢谢。

以上是关于Unity 中的 Touch Input 会记住最后一个位置的主要内容,如果未能解决你的问题,请参考以下文章

Unity如何判断Ui是不是被Touch

怎么在 Unity3d 中模拟touch事件

unity easytouch怎么用?unity easytouch摇杆怎么做?

记住 selectfield sencha touch

Unity Notes之屏幕触点轨迹的平滑

在unity3D中,点击=触摸?