在每次触摸之间更改 X 的值

Change the value of X between each touch

我正在学习 C#,请帮帮我,我正在尝试传递我用来发出键盘声音的代码,但是当我使用触摸时,有时它会停止检测或增加值,我已经在一些设备上尝试过了设备和同样的事情发生了,我希望有人告诉我如何使它正常工作而没有那个故障。

这是我在电脑上使用的代码

  private void FixedUpdate()
     {
         if (Input.GetKey(KeyCode.D))
         {
             direccion = 5;
         }
         else if (Input.GetKey(KeyCode.A))
         {
 
             direccion = -5;
         }
         if (run2 == true)
         {
             gameObject.transform.Translate(direccion * Time.deltaTime, velocidad * Time.deltaTime, 0);
         }

这是我尝试用于手机的代码。

 private void FixedUpdate()
     {
         foreach (Touch touch in Input.touches)
        if (touch.phase == TouchPhase.Began)
         {
                 direct = true;
                 if (direct == true)
                 {
                     getTouch++;
                     direct = false; 
                 }
                 if (getTouch ==1)
                 {
                     direccion = 5;
                 }
                 else if (getTouch >= 2)
                 {
                     direccion = -5;
                     getTouch = 0;
                     direct = true;
                 }
             }
  
         if (run2 == true)
         {
             gameObject.transform.Translate(direccion * Time.deltaTime, velocidad * Time.deltaTime, 0);
         }

设置好后

direct = true;

下一个

if(direct == true)

永远如此

一般来说,不要使用计数器等,而是简单地做例如

private int direction = 5;

然后以后只交替做符号

if (touch.phase == TouchPhase.Began)
{
     direccion *= -1;
}

不过一般来说:

你的第一个代码没问题,因为它使用了连续输入GetKey,每一帧都是如此。

但是 每当您使用 单个事件 输入时 GetKeyDown 或者在您的情况下是 TouchPhase.Began true 仅在 一个单帧内 您应该在 Update!

中输入

由于可能不会在每一帧都调用 FixedUpdate,因此您可能只是在未调用 FixedUpdate 的帧内点击 => 您错过了此触摸输入。

所以宁愿使用

private int direction = 5;

private void Update()
{
    foreach (Touch touch in Input.touches)
    {
        if (touch.phase == TouchPhase.Began)
        {
             direccion *= -1;
        }
    }
}

private void FixedUpdate ()
{
     if (run2)
     {
         transform.Translate(direccion * Time.deltaTime, velocidad * Time.deltaTime, 0);
     }
}