Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 代码在foreach循环中迭代84次,unity3d_C#_Unity3d - Fatal编程技术网

C# 代码在foreach循环中迭代84次,unity3d

C# 代码在foreach循环中迭代84次,unity3d,c#,unity3d,C#,Unity3d,我正在编写一段代码,到目前为止,一切似乎都正常工作,但出于某种原因,我有一个foreach循环,它在结束之前迭代了84次。我想向循环中添加更多代码来移动我正在迭代的磁贴,但它运行了84次移动代码,并将其从世界坐标中抛出 void Update () { if (Input.GetMouseButtonDown (0)) { var mousePos = Input.mousePosition; mousePos.z = 0f; mouseP

我正在编写一段代码,到目前为止,一切似乎都正常工作,但出于某种原因,我有一个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:添加了一个到调试日志的链接,我在循环中有这个链接,以准确地显示正在发生的事情


你正在更新中调用你的foreach,这不是只工作一次,而是每帧工作一次。但84倍是一个非常高的数字。 您可以使用单个标志进行控制,并且只能运行一次

    doLoop = true;

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

我发现了这个问题,所以我把这个脚本附加到游戏中的每个瓷砖对象上。因此,脚本中的所有内容都将运行84次,因为创建了84个分片


谢谢大家的帮助

您得到的错误是什么?tileInfo的长度是多少?这会引发一些代码错误,我想添加您试图添加的代码,以及这会导致哪些错误。目前,我们只能说tileInfo中有84项,但这可能不是您想要知道的。tileInfo的长度是84,即使是相同的,也不应该重复相同的次数。您必须复制并粘贴错误,伙计!单击问题下方的Edit(编辑)即可执行此操作。这并没有解决问题,但对于每个true语句,它仍会在循环中迭代84次。如果TileInfo长度为84,则foreach代码运行84次是正确的。你需要修复你的状况来做你需要或不需要的事情。