C# 触摸屏,如何调整我的代码,使其只对一个手指做出反应

C# 触摸屏,如何调整我的代码,使其只对一个手指做出反应,c#,unity3d,input,touch,touchscreen,C#,Unity3d,Input,Touch,Touchscreen,我正在尝试为我的android手机添加有限的触摸屏控制。我一直在看这些教程,但我只是没有得到一个简单的部分,至少我认为它很简单。在我的手机上,当你用手指敲击它时,我有一辆卡车向左转。当我再次点击它时,我希望它正确。每次你点击屏幕,它都应该向另一个方向移动,左右交替。它现在已经不管用了,但实际上并不管用。当你第一次点击它时,它会向左移动。但是为了让它正常运行,你必须用一个手指按住屏幕,然后用第二个手指触摸它。我只想让它一次只对一个手指做出反应,这样你就可以用一只手玩了。这是我的代码。我做错了什么?

我正在尝试为我的android手机添加有限的触摸屏控制。我一直在看这些教程,但我只是没有得到一个简单的部分,至少我认为它很简单。在我的手机上,当你用手指敲击它时,我有一辆卡车向左转。当我再次点击它时,我希望它正确。每次你点击屏幕,它都应该向另一个方向移动,左右交替。它现在已经不管用了,但实际上并不管用。当你第一次点击它时,它会向左移动。但是为了让它正常运行,你必须用一个手指按住屏幕,然后用第二个手指触摸它。我只想让它一次只对一个手指做出反应,这样你就可以用一只手玩了。这是我的代码。我做错了什么?我怎么修理它?提前谢谢大家

我试着摆脱退货。尝试调整现有代码,并根据其他教程在其中添加其他内容

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class playerController : MonoBehaviour { 

private Rigidbody rb;
private Animator anim;
private bool left = false;
private bool right = false;
public static bool detect = false;
public float yspeed; //left or right from camera's vp
public float xSpeed = 55f; //down the road from camera's vp
[HideInInspector]
public bool crash = false;
public int slowSpeed;
private float respawnTimer = 3f;

void Start () {
    rb = GetComponent<Rigidbody> ();
    anim = GetComponent<Animator> ();
    rb.velocity = new Vector3 (xSpeed, rb.velocity.y, rb.velocity.z);
}


void Update () {    

    Movement ();
    Halt ();
}

public void Movement()
{
    if (crash) {
        left = false;
        right = false;
        scoreManager.scoreValue = 0;
    }
    detect = false;



    if (Input.touchCount > 0 && !left) {
        foreach (Touch touch in Input.touches) {
            rb.velocity = new Vector3 (rb.velocity.x, yspeed, 0);
            left = true;
            right = false;
            return;
        }
    }

        if (Input.touchCount > 0 && !right) {
            foreach (Touch touch in Input.touches) {
                rb.velocity = new Vector3 (rb.velocity.x, -yspeed, 0);
                right = true;
                left = false;
            return;
        }
    }
}

void OnTriggerEnter (Collider other)
{
    if (!crash && other.gameObject.tag == ("wall")) {
        crash = true;
        anim.SetTrigger ("crash");
    }

}
public void Halt()
{       
    if (crash && slowSpeed > 0) {
        rb.velocity = new Vector3 (--slowSpeed, 0, 0);
        Invoke ("Restart", respawnTimer);
    }
}

public void Restart ()
{
    Application.LoadLevel ("scene_01");
}
}

当你按住时,你会注意到它会在你触摸屏幕的每一帧左右切换。考虑使用触摸阶段进行更精细的输入。试试这个:

...
if (Input.touchCount > 0 && Input.touches[0].phase == TouchPhase.Began) {
    if(right) {
        rb.velocity = new Vector3 (rb.velocity.x, yspeed, 0);
        left = true;
        right = false;
    } else if (left) {
        rb.velocity = new Vector3 (rb.velocity.x, -yspeed, 0);
        right = true;
        left = false;
    }
}
...
请参阅Android设备上部署的代码:


我想出来了,这太愚蠢了。我只需要更新我的手机,使用fire1和fire2,就好像它是鼠标控制一样,这就是我最初使用它的目的。当我更新我的手机时,touchCount参数对我的手机没有任何反应,所以我尝试了我的一个早期版本,当时我仍然让它只适用于PC。这是现在适用于我的代码

if (Input.GetButtonDown ("Fire1") && !left){
        rb.velocity = new Vector3 (rb.velocity.x, yspeed, 0);
        left = true;
        right = false;
        return;

    }
    if (Input.GetButtonDown ("Fire1") && left){
        rb.velocity = new Vector3 (rb.velocity.x, -yspeed, 0);
        right = true;
        left = false;
        return;
    }

没有区别。感谢更简洁的版本,尽管我将代码部署到了Android设备上,我只需轻轻一按就可以在左右之间切换。您介意在每个if语句下添加Debug.Logleft和Debug.Logright,看看布尔值是否确实在变化吗?潜在的问题可能与刚体对象有关。我可以,但我不能在unity编辑器中测试它,因为它都是我手机上的触摸屏,而不是unity编辑器。我没有使用触摸屏笔记本电脑。在我将其转换为touchCount之前,我的旧代码至少在Unity Remote应用程序中起作用,但从我的研究来看,它对于游戏的实际功能来说是一个非常糟糕的表示。它对touchCount根本不起作用,但是我使用的apk文件更准确,正如我在问题介绍中所描述的那样工作。与unity remote 5一样,它根本没有反应,控制台中也没有调试消息。