有没有一种方法可以在Unity中实现触摸和按住

时间:2018-12-30 15:48:32

标签: c# unity3d

是否有一种方法可以在手指按住屏幕的同时进行某些操作。

我想做的是在手指仍在屏幕上的同时,将手指放在屏幕上并使对象旋转(仅Y轴)。抬起手指时,旋转应该停止。

这是我的代码:

using UnityEngine;

public class RotateObs : MonoBehaviour
{
    public float rotateSpeed;

    private void Update()
    {
        if(Input.touchCount > 0)
        {
            Touch touch = Input.GetTouch(0);
            if (touch.phase == TouchPhase.Began)
            {
                transform.Rotate(Vector3.up * rotateSpeed * Time.deltaTime);    
            }
        }
    }
}

我希望当手指(在PC上也可以使用鼠标)在屏幕上时,对象应该旋转。

发生的是-它仅旋转1帧,然后停止。它就像单击一样进行注册,无论我的手指是否仍在屏幕上都没有关系。

我很确定自己做错了,只是看不到哪里。

2 个答案:

答案 0 :(得分:0)


如果要检测用户是否按住鼠标键,则应使用

if (Input.GetMouseButton(0))
{
    transform.Rotate (Vector3.up * rotateSpeed * Time.deltaTime);
}

实际上,这一行代码甚至在移动设备上也可以使用,但是如果您想使用Touches,

if (Input.touchCount > 0)
{
    Touch first = Input.GetTouch (0);
    if (first.phase == TouchPhase.Stationary) 
    {
        transform.Rotate (Vector3.up * rotateSpeed * Time.deltaTime);
    }
}

答案 1 :(得分:0)

我正面临着类似的问题。如果用户按住屏幕,我想将播放器绕一点旋转。触摸向右可将播放器顺时针移动,反之亦然。 这是代码:

 void Update()
{
    if(Input.touchCount > 0)
    {
        Touch touch = Input.GetTouch(0);
        Vector3 touchPos = Camera.main.ScreenToWorldPoint(touch.position);
        touchPos.z = 0f;
        if (touch.phase == TouchPhase.Stationary)
        {
            if (touchPos.x > 0)
                movement = 1f;
            else if (touchPos.x < 0)
                movement = -1f;
        }
        if (touch.phase == TouchPhase.Ended)
        {
            movement = 0f;
        }
        
    }
}

private void FixedUpdate()
{
    transform.RotateAround(centre, Vector3.forward, movement * Time.fixedDeltaTime * -moveSpeed);
}