Может ли проверка попаданий из Raycast вызвать сбой игры? - PullRequest
0 голосов
/ 20 декабря 2018

, поэтому я пытаюсь определить, нажимаю ли я на объект с тэгом «solarsystem», и если да, то загружаю эту solarsystem в другую сцену.этот код прекрасно работал раньше, но теперь он вылетает таким образом, что мне приходится завершать единицу из диспетчера задач с помощью кнопки завершения задачи, чтобы даже закрыть его.он просто перестает отвечать полностью.

вот код, в котором, как мне кажется, я обнаружил ошибку после того, как возился со многими Debug.log, чтобы найти, где код остановился и, следовательно, выяснить, где единство перестает отвечать:

    RaycastHit[] hit = Physics.RaycastAll(cursorPosition, Vector3.forward,15f);
        Debug.Log("test2");//this is printed to the console - code crashes below this line
        for(int i = 0; i < hit.Length; i++)
        {
            Debug.Log("hit"); // this is never printed to console - code crashes above this line
            if(currentScene == "Universe")
            {
                if(hit[i].collider.gameObject.tag == "SolarSystem")
                {
                    ChangeScene("SolarSystem");
                    SolarSystem clickedSolarSystem = hit[i].collider.gameObject.GetComponent<SystemObjectLink>().LinkedClass;
                    SolarSystem LoadedSolarSystem = SolarSystemCamera.GetComponent<SolarSystem>() as SolarSystem;
                    LoadedSolarSystem = clickedSolarSystem;
                    Debug.Log("generating system clicked on");
                    if (LoadedSolarSystem.preGenerated == false)
                    {
                        LoadedSolarSystem.Generate();
                    }
                    else
                    {
                        LoadedSolarSystem.Regenerate();
                    }
                    break;
                }
            }
            if(currentScene == "SolarSystem")
            {
                if (hit[i].collider != null)
                {
                    if (hit[i].collider.gameObject.tag == "Planet")
                    {
                        Target = hit[i].collider.gameObject;
                        break;
                    }
                    else if (hit[i].collider.gameObject.tag == "Moon")
                    {
                        Target = hit[i].collider.gameObject;
                        break;
                    }
                    Target = hit[i].collider.gameObject;
                }
            }
        }

1 Ответ

0 голосов
/ 21 декабря 2018

У меня был оператор for(;;) с жестко закодированным оператором

    if(<state>){
        break:
    }

, чтобы разорвать бесконечный цикл.но когда я нажимаю на объект в игре.он проверяет код на наличие ошибок перед его запуском.когда он делает это, он попадает в бесконечный цикл, и поэтому, чтобы исправить это, я сделал

    for(;errorIndex<99; errorIndex++){

    }

мою ошибку и то, что я узнал:

никогда не использоватьwhile(true) цикл или цикл for без возможности выбраться из себя (for(;;))

если движок / редактор единства когда-либо перестает отвечать, это потому, что он заперт в бесконечном цикле - посмотрите на свойкод и убедитесь, что ни один из ваших циклов не может продолжаться вечно

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