Jump to content
Unity Insider Forum

Ich verstehe SceneManager.LoadScene einfach nicht Hilfe.


TheRoxas

Recommended Posts

Hallo alle miteinander!

Ich habe mit Unity runtergeladen und mich an dem ersten Tutorial auf der Website " Roll a Ball" zu schaffen gemacht und die ersten Schritte geschafft aber kriege es einfach nicht hin die Funktion SceneManager.Loadscene zu verstehen.

1.thumb.PNG.9b1bb6cd0e260735bf04eec3d03cf4b4.PNG

 

Ich wollte mehrere Level ( Scenes) erstellen und es so machen das wenn man alle 12 gesammelt hat dann in die nächste Scene geladen wird aber checke einfach nicht wie ich das machen soll. Die Erklärungen auf Youtube und der Unity Seite sind für mich warum auch immer auch unverständlich und ich bin echt am Ende mit meinem Latein.

 

using System.Collections;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Globalization;
using System.Runtime.InteropServices;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;


public class PlayerController : MonoBehaviour
{

    public float speed;
    public Text countText;
    public Text winText;

    private Rigidbody rb;
    private int count;

    void Start()
    {
        rb = GetComponent<Rigidbody>();
        count = 0;
        SetCountText();
        winText.text = "";
    }

    void FixedUpdate()
    {
        float moveHorizontal = Input.GetAxis("Horizontal");
        float moveVertical = Input.GetAxis("Vertical");

        Vector3 movement = new Vector3(moveHorizontal, 0.0f, moveVertical);

        rb.AddForce(movement * speed);
    }

    void OnTriggerEnter(Collider other)
    {
        if (other.gameObject.CompareTag("Pick Up"))
        {
            other.gameObject.SetActive(false);
            count = count + 1;
            SetCountText();
        }
    }

    void SetCountText()
    {
        countText.text = "Count: " + count.ToString();
        if (count >= 12)
        {
            winText.text = "You Win!";
        }
    }
    
}


Ganz nach der Erklärung habe ich den PlayerController gemacht.

Ich hoffe und freue mich auf Hilfe.

Bleibt gesund und danke.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Du musst die Szenen die du laden möchtest in den Build-Settings eintragen.
Dabei bekommt jede Szene einen Index, dieser Index muss beim Laden der Szenen angegeben werden.

Deine Start-Szene hat den Index 0. Weitere Level dann z.B. den  Index 1 , Index 2 usw.

File -> "Build Settings" -> "Add Open Scenes"
C7513ml.png


Hier der Code wie du die Level dann laden kannst. Ich habe dies so erweitert, dass du einstellen kannst wie lange Unity noch warten soll bis er das Level läd, damit der Spieler noch seine erreichte Punktzahl sehen kann:

private int currentLevel = 0;

 void SetCountText()
    {
        countText.text = "Count: " + count.ToString();
        if (count >= 12)
        {
           winText.text = "You Win!";
           StartCoroutine (LoadNextLevel(++currentLevel, 5f)); // Läd Level mit Index "currentLevel + 1" nach 5 Sekunden
        }
    }

IEnumerator LoadNextLevel(int level, float timetowait)
{
    yield return new WaitForSeconds(timetowait); // wartet timetowait Sekunden
    SceneManager.LoadScene(level); // Läd das Level mit dem Index level
}

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Wenn du das noch einbaust, dann wird currentLevel immer auf das aktuell geladene Level gesetzt:

private int currentLevel = 0;

void Start () {
  currentLevel = SceneManager.GetActiveScene().buildIndex;
}

void SetCountText()
    {
        countText.text = "Count: " + count.ToString();
        if (count >= 12)
        {
           winText.text = "You Win!";
           StartCoroutine (LoadNextLevel(++currentLevel, 5f)); // Läd Level mit Index "currentLevel + 1" nach 5 Sekunden
        }
    }

IEnumerator LoadNextLevel(int level, float timetowait)
{
    yield return new WaitForSeconds(timetowait); // wartet timetowait Sekunden
    SceneManager.LoadScene(level); // Läd das Level mit dem Index level
}

Damit wird die Reihenfolge der Level nun über den Build-Index bestimmt, siehe Dialog oben wo du die Szenen einstellst, man kann hier auch die Reihenfolge verschieben ...!

Link zu diesem Kommentar
Auf anderen Seiten teilen

Leider kommt da dieser Fehler:2.thumb.PNG.29cb2133df5b703afed75564a328da36.PNG

 

using System.Collections;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Globalization;
using System.Runtime.InteropServices;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;


public class PlayerController : MonoBehaviour

{

    public float speed;
    public Text countText;
    public Text winText;

    private Rigidbody rb;
    private int count;

    void Start()
    {
        rb = GetComponent<Rigidbody>();
        count = 0;
        SetCountText();
        winText.text = "";
    }

    void FixedUpdate()
    {
        float moveHorizontal = Input.GetAxis("Horizontal");
        float moveVertical = Input.GetAxis("Vertical");

        Vector3 movement = new Vector3(moveHorizontal, 0.0f, moveVertical);

        rb.AddForce(movement * speed);
    }

    void OnTriggerEnter(Collider other)
    {
        if (other.gameObject.CompareTag("Pick Up"))
        {
            other.gameObject.SetActive(false);
            count = count + 1;
            SetCountText();
        }
    }

    private int currentLevel = 0;

    void Start()
    {
        currentLevel = SceneManager.GetActiveScene().buildIndex;
    }

    void SetCountText()
    {
        countText.text = "Count: " + count.ToString();
        if (count >= 12)
        {
            winText.text = "You Win!";
            StartCoroutine(LoadNextLevel(++currentLevel, 3f)); // Läd Level mit Index "currentLevel + 1" nach 5 Sekunden
        }
    }

    IEnumerator LoadNextLevel(int level, float timetowait)
    {
        yield return new WaitForSeconds(timetowait); // wartet timetowait Sekunden
        SceneManager.LoadScene(level); // Läd das Level mit dem Index level
    }

}

 

Hab ich es falsch eingefügt ?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.

×
×
  • Neu erstellen...