Unity drag&drop,挣扎在索引问题上。

问题描述 投票:-1回答:1

我在Unity 2d中做拖放功能。

三个选项,一个空白

我放了三个选项,它命名为 "选项1","选项2","选项3"

**这个场景空白应该与选项3相匹配。

下一个场景空白应该与选项1相匹配

最后一个场景空白应该与选项2**相匹配。

这是我想要的。但它说

IndexOutOfRangeException。IndexOutOfRangeException: Index was outside the bounds of the array.streetlight_dragdrop.Start()(在...)的范围外。

(我使用这个代码的另一个func,"3个选项和3个空白",它工作得很好。但在这种情况下,它不工作...)

public GameObject[] options; //drag options objects
public GameObject[] blankoptions; //blank
Vector3[] optionsStartPos;
Vector3[] blankoptionsStartPos;




void Start()
{

    optionsStartPos = new Vector3[options.Length];
    blankoptionsStartPos = new Vector3[blankoptions.Length];
    for (int i = 0; i < options.Length; i++)
    {
        optionsStartPos[i] = options[i].transform.position;
        blankoptionsStartPos[i] = blankoptions[i].transform.position;
    }
}


public void dragOptions(GameObject option)
{
    option.transform.position = Input.mousePosition;
}


public void dropOptions(GameObject option)
{

    int index = System.Array.IndexOf(options, option);
    float dist = Vector3.Distance(option.transform.position, blankoptions[index].transform.position);
    if (dist < 80) //correct
    {
        option.transform.position = blankoptions[index].transform.position;

        if (gameObject.name == "option3")
        {
            //after 2sec, scene change func
            Invoke("street_5", 2);
        }

    }

    //incorrect
    else
    {
        Handheld.Vibrate();
        option.transform.position = optionsStartPos[index];
    }


}
c# unity3d
1个回答
0
投票

(希望我的理解是正确的--因为你没有发布整个错误信息) 在这个循环中,你是从 0 循环到 options.Length,但是如果 blankoptions.Length 更小呢? 或者反之亦然?这很可能会导致 " Index was outside the bounds " 错误。

for (int i = 0; i < options.Length; i++)
{
    optionsStartPos[i] = options[i].transform.position;
    blankoptionsStartPos[i] = blankoptions[i].transform.position;
}

例如,如果你的选项.Length小于空白选项.Length,那么你就会导致 "索引超出边界 "的错误。

optionsStartPos = new Vector3[10];
blankoptionsStartPos = new Vector3[1000];
for (int i = 0; i < options.Length; i++)
{
    optionsStartPos[i] = options[i].transform.position;
    blankoptionsStartPos[i] = blankoptions[i].transform.position;
}

会导致这个错误。

© www.soinside.com 2019 - 2024. All rights reserved.