Der Versuch, Multithreading zu verwenden, um Unity Loadsceneasync zu umgehen, ist nicht asynchronC#

Ein Treffpunkt für C#-Programmierer
Anonymous
 Der Versuch, Multithreading zu verwenden, um Unity Loadsceneasync zu umgehen, ist nicht asynchron

Post by Anonymous »

Ich sehe immer wieder Leute, die Ladeszenen veröffentlichen, in denen die Fortschrittsleiste funktioniert. Ich habe einen animierten Charakter, während die Szene geladen wird, und alles friert nur ein. Wie die Leute gesagt haben, ist es nicht perfekt asynchron. Das Debugg geht von 0 auf 0,9 und Sie können die Verzögerung im Zeitstempel sehen. Also dachte ich, wenn ich mit Code animieren und diesen Code in einem neuen Thread animiert habe, kann er weiterhin animieren, aber leider funktionierte das nicht. Unity gab einen Fehler, der besagte, dass ich das Threading auf diese Weise nicht verwenden konnte. Dies ist der Fehler. Sprite in einen anderen Thread oder ist der andere Thread nur für Berechnungen gut und kann die Szene überhaupt nicht aktualisieren.

Code: Select all

private void Start()
{
animating = true;
backGroundThread = new Thread(AnimateIt);
backGroundThread.Start();
StartCoroutine(LoadScene());
}

private void OnDestroy()
{
animating = false;
}
IEnumerator LoadScene()
{
AsyncOperation asyncLoad = SceneManager.LoadSceneAsync(gotoScene.ToString(), LoadSceneMode.Single);
asyncLoad.allowSceneActivation = false;
while (!asyncLoad.isDone)
{
Debug.Log(asyncLoad.progress);
if (asyncLoad.progress >= 0.9f)
{
yield return new WaitForSeconds(0.5f);
asyncLoad.allowSceneActivation = true;
}
yield return null;
}
yield return null;
Debug.Log("Out Of Loops");
Destroy(gameObject);
}
public void AnimateIt()
    {
        int currentFrame = 0;
        while (animating)
        {
            int frame = (int)(currentFrame % frameList.Count);
            frameSprite.sprite = frameList[frame];
            currentFrame++;
            Thread.Sleep((int)((frameRate / 60)*1000));
        }
    }
< /code>
Bearbeiten ------
Das Original ist super einfach. Es ist nur eine Ladung und die Animation wird nur mit einem Animator durchgeführt. Sie können im Video sehen, dass die Animation auf dem Animator einfriert. Sie können sehen, dass die während der Schleife nicht richtig zu schleifen scheint. Es geht von 0 - 0,9 nach 7 Sekunden ohne Schleife aus, um den Fortschritt < /p>
hier zu zeigen.public void SetUp(LOCATIONS _gotoScene)
{
gotoScene = _gotoScene;
DontDestroyOnLoad(gameObject);
}
void FadeOnfinished()
{
StartCoroutine(LoadScene());
}
IEnumerator LoadScene()
{
AsyncOperation asyncLoad = SceneManager.LoadSceneAsync(gotoScene.ToString(), LoadSceneMode.Single);
asyncLoad.allowSceneActivation = false;
Debug.Log("Going to Load");
while (!asyncLoad.isDone)
{
Debug.Log("Loading: "+ asyncLoad.progress * 100 + "%");
if (asyncLoad.progress >= 0.9f)
{
yield return new WaitForSeconds(0.5f);
asyncLoad.allowSceneActivation = true;
}
yield return null;
}
yield return null;
Debug.Log("Loaded");
animator.SetTrigger("Off");
}

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post