统一点击移动问题

unity tap mobile issue

我有一个简单的场景,当玩家点击时,球会改变方向 90 度; 我的代码有效,但并不完美,主要问题是 "tap" 检测

需要使用 Coroutine 在点击之间暂停,但 0.25sec 的暂停太大,在某些情况下响应时间很慢,但如果尝试减少暂停时间,它会运行代码快,它不再不同水龙头; 我也尝试过 touch.phase == begantouch.phase.Stationary 但这也没有用

我想实现点击的效果,即使你按住它也会改变一次方向。

有没有人有更好的检测点击的解决方案?

using UnityEngine;

using System.Collections;


public class playerController : MonoBehaviour {

public float speed = 2f;
public float tapPauseTime = .25f;
Rigidbody rb;
bool timerOn;
bool goingRight;


void Awake(){

    rb = GetComponent<Rigidbody> ();
    timerOn = false;
    goingRight = false;
}

// Update is called once per frame
void Update () 
{

    if (Input.touchCount == 1 && !timerOn && !goingRight) {

            rb.velocity = Vector3.zero;
            rb.angularVelocity = Vector3.zero;
            rb.velocity = new Vector3 (speed, 0, 0);
            timerOn = true;
            goingRight = true;
            StartCoroutine(TapPause());
        }

    if(Input.touchCount == 1 && !timerOn && goingRight)
        {
            rb.velocity = Vector3.zero;
            rb.angularVelocity = Vector3.zero;
            rb.velocity = new Vector3(0,0,speed);
            timerOn=true;
            goingRight = false;
            StartCoroutine(TapPause());
        }


}

IEnumerator TapPause(){
    yield return new WaitForSeconds(tapPauseTime);
    timerOn = false;
}

}

如果您只关心单点触摸事件(即没有多点触摸),Input 中的所有鼠标处理程序都会模拟第一次触摸。因此,您可以使用 Input.GetMouseButtonDown(0) 来查找何时有触摸。此功能只会 return 按下鼠标(或在您的情况下为触摸)发生的帧,并且在释放并再次按下按钮之前不会再次 return 为真。您可以将 if 语句中的 Input.touchCount == 1 替换为 Input.GetMouseButtonDown(0) 来试试这个。