首页 > 解决方案 > Unity拖放,与索引问题作斗争

问题描述

我正在做拖放功能。统一二维

三个选项,一个空白

我放了三个选项,它命名为“option1”、“option2”、“option3”

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

下一个场景空白应该匹配 option1

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

这就是我要的。但它说

IndexOutOfRangeException:索引超出了数组的范围。streetlight_dragdrop.Start () (在

(我使用这个代码另一个函数“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

解决方案


(希望我理解正确——因为你没有发布整个错误消息)在这个循环中,你从 0 循环到 options.Length,但是如果 blankoptions.Length 更小怎么办?或相反亦然?这可能会导致“索引超出范围”错误。

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

例如:

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;
}

会导致这个错误。


推荐阅读