Unity drag & drop, борьба с проблемой индекса - PullRequest
0 голосов
/ 22 апреля 2020

Я делаю функцию перетаскивания. в единстве 2d

Три варианта и один пробел

Я поставил три варианта и назвал их «option1», «option2», «option3»

** Эта пустая сцена должна соответствовать опции 3

Следующая пустая сцена должна соответствовать опции 1

Последняя пустая сцена должна соответствовать опции2 **

Вот что я хочу. Но он говорит

IndexOutOfRangeException: индекс был за пределами массива. streetlight_dragdrop.Start () (в

(я использовал этот код еще один забавный c, что «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];
    }


}

1 Ответ

0 голосов
/ 23 апреля 2020

(Надеюсь, я правильно понимаю - поскольку вы не опубликовали полное сообщение об ошибке) В этом l oop вы переходите от 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;
}

приведет к этой ошибке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...