我在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];
}
}
(希望我的理解是正确的--因为你没有发布整个错误信息) 在这个循环中,你是从 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;
}
会导致这个错误。