代码迭代一次foreach循环84次,unity3d

时间:2016-03-10 01:27:51

标签: c# unity3d

我正在处理一段代码,到目前为止一切似乎都正常工作,但由于某种原因,我有一个foreach循环,在结束前迭代84次。我想在循环中添加更多代码来移动我正在迭代的图块,但是它会运行84次移动代码并将其抛出世界坐标。

void Update () {
    if (Input.GetMouseButtonDown (0)) {
        var mousePos = Input.mousePosition;
        mousePos.z = 0f;
        mousePos = Camera.main.ScreenToWorldPoint (mousePos);

        clickedX = boardScript.RoundToScale(mousePos.x);
        clickedY = boardScript.RoundToScale(mousePos.y);
    }

    if (Input.GetMouseButtonUp (0)) {
        boardScript.movingLeft = false;
        boardScript.movingRight = false;
        boardScript.movingUp = false;
        boardScript.movingDown = false;
        tempList.Clear ();

        //This is the foreach loop that is iterating 84 times
        foreach (TileInfo tile in tileInfo) {
            if (tile.tileLocation.y == clickedY) {
                Vector3 clickedLocation = tile.tileObject.transform.position;
                Debug.Log ("we landed at: " + clickedLocation.x + ", " + clickedLocation.y);
            }
        }

        return;
    } 

    if (Input.GetMouseButton (0)) {
        if (Input.GetMouseButtonUp (0)) {
            return;
        }
        float mouseMoveX = Input.GetAxis ("Mouse X");
        float mouseMoveY = Input.GetAxis ("Mouse Y");

        if (mouseMoveX < 0) {
            boardScript.movingLeft = true;
            boardScript.movingRight = false;
        }

        if (mouseMoveX > 0) {
            boardScript.movingLeft = false;
            boardScript.movingRight = true;
        }

        foreach (TileInfo tile in tileInfo) {
            if (tile.tileLocation.y == clickedY) {
                tile.tileObject.transform.Translate (mouseMoveX, 0, 0);
            }
        }
    }
}

如果您需要其他任何代码段或任何其他内容让我知道,我就是新手并仍然在学习。

编辑:澄清了我问的问题。

Edit2:添加了我在循环中调试日志的链接,以准确显示正在发生的事情。

command log

2 个答案:

答案 0 :(得分:0)

你在更新中呼叫你的foreach,这不能只工作一次,每个帧都有效。但84次是非常高的数字。 您可以使用单个标志来控制并仅运行一次。

    doLoop = true;

    if (doLoop)
    {
     doLoop = false;
     //my loop script
    }

答案 1 :(得分:0)

我想出了这个问题,所以我将这个脚本附加到游戏中的每个tile对象上。因此,自创建了84个图块以来,脚本中的所有内容都会运行84次。

感谢所有的帮助!