嵌套if else块中的Input.GetMouseButtonDown()似乎永远不会成立

时间:2017-01-07 19:22:32

标签: c# unity3d

我需要检查用户点击了哪个对象(游戏片段)......但问题是if else块似乎没有检测到鼠标按钮单击。如果我删除' Input.GetMouseButtonDown(0)'来自else if条件它的工作原理。这是我的代码:

void Update () {
    if (chance == 1) {
        if (Input.GetKeyUp (KeyCode.Space)) {
            if (enableInput == true) {
                enableInput = false;
                markers [0].gameObject.SetActive (true);
                markers [1].gameObject.SetActive (false);
                markers [2].gameObject.SetActive (false);
                markers [3].gameObject.SetActive (false);
                a.PlayOneShot (s_Dice);
                DiceRoll ();
                if (subPlayer == 4 && diceno == 6) {
                    Vector3 temp;
                    Vector3 currentPos;
                    subPlayer -= 1;//3
                    temp = transform.position;
                    subplayers1 [0].transform.position = new Vector3 (startingpos1.transform.position.x, -1.8f, startingpos1.transform.position.z);
                    Invoke ("waitandgo",0.5f);
                } else if (Input.GetMouseButtonDown(0) && subPlayer == 3 && diceno == 6) {
                    //print ("clicked");
                    //ray = Camera.main.ScreenPointToRay (Input.mousePosition);
                    //if (Physics.Raycast (ray, out hit)) {
                    print("Click");
                }
            }
        }
    }
}

1 个答案:

答案 0 :(得分:2)

Input.GetKeyUp()Input.GetMouseButtonDown()等仅在事件发生时对单帧保持为真。在您的代码中,如果您没有在确切的框架中释放空间,则单击鼠标按钮(几乎总是如此),这两个条件永远不会同时满足,您永远不会输入{{1案件。

你想要的是当空间被释放时,确定是否需要玩家的鼠标输入,然后从那一点开始监听鼠标点击。这样,您不仅限于释放空间并同时单击鼠标的单帧窗口。

你需要另外一个变量来存储你是否在等待从播放器点击鼠标 - 如果你需要从播放器中选择,只需将标志设置为true,所以在空间释放后的任何时候你都可以点击鼠标:

else if

注意:我没有在这里添加它,但是您应该进行一些条件检查,以确保在没有接收到该玩家输入的情况下不会向前移动游戏。确保您执行正确的游戏顺序!

希望这有帮助!如果您有任何问题,请告诉我。