Jump to content
Unity Insider Forum

Jump and Run mit sich immer neuer generierbarer Karte


Recommended Posts

Ich würde gerne einen Jump and Run programmieren der sich immer weiter lädt/ generiert. Ich bin totaler Anfänger und hab deshalb keie Ahnung wie das geht. Ich würde mich freuen wenn jemand eine Lösung dafür hat und es auch erklären (oder Erklärlinks hinzufügen) kann.

P. S ich bin schon seit Wochen nach einer Lösung am suchen, damit meine ich nicht einfach ein Viedeo das mir den Code vorschreibt sondern nach erklärungen wie ich den Code schreiben kann, respektiv Erklärungen. Ich möchte es nicht Abschreiben sondern verstehen, dachte ich mir dabei.

 

Ich danke euch für eure Unterstützung

Joscupe

Link to post
Share on other sites

Also grundsätzlich versteh ich gar nich terst wie man hier vorgeht um eine sich immer neuer genererierbarer Map macht. Also grundsätzlich habe ich keine Idee wie ich das machen kann.

Joscupe

Link to post
Share on other sites

Hallo

 

Du kannst dir einzelne Elemente der Map erstellen und diese als prefabs hinterlegen. Kannst du dir als Baustein vorstellen. Wenn du einige dieser Bausteine erstellt hast, kannst du dir während der Laufzeit deines Programms zufällig einen davon auswählen und anzeigen. Das ist das Grundprinzip. Natürlich kannst du das beliebig verfeinern, aber so ist der Start. 

Tipp: Mach dir zwei total simple Prefabs (einfach zwei Grafiken) und versuche dann 10 anzuzeigen, wobei zufällig ist, welches grafik an 1,2,3, usw angezeigt wird. Von dort aus, ist der Rest ein Kinderspiel🤪. Du MUSST ganz klein anfangen.

 

Christoph

Link to post
Share on other sites

Ich versuche mich gerade an den Würfeln, dass ein Würfel zufällig generiert wird.

public class RandomCubes : MonoBehaviour
{
    public GameObject[] Cube1;
    public GameObject[] Cube2;
    public GameObject[] Cube3;
    public GameObject[] Cube4;
    public GameObject[] Cube5;
    public GameObject[] Cube6;
    public GameObject[] Cube7;
    public GameObject[] Cube8;
    public GameObject[] Cube9;
    public GameObject[] Cube10;




    void Start()
    {
        GameObject[] CubesOneToTen = new GameObject[Cube1, Cube2, Cube3, Cube4 ,Cube5, Cube6, Cube7, Cube8, Cube9, Cube10];
        var prefab = CubesOneToTen[Random.Range(0, CubesOneToTen.Length)];
    }

Deshalb wollte ich alle Würfel in eine Liste packen was aber als Error angezeigt wird, ich suchte schon im Internet nach einer Lösung wie Gameobjects in eine Liste machen kann, leider erfolglos. Deshalb frage ich mich wie ich das lösen könnte.

Joscupe

Link to post
Share on other sites

Wenn du eine Variable mit eckigen Klammern deklarierst, dan legst du fest, dass diese Variable ein Array bildet.
Du hast also 10 GameObject-Arrays gebildet und die Cube1 bis Cube10 genannt.
In der Start willst wieder ein GameObject-Array bilden und dort gleich deine Cube Arrays einfügen. Also ein Array aus 10 Arrays.

Merkst du es?

Deklarier doch einfach gleich ein einziges Array, welches 10 Stellen hat und leg dann im Inspector alle deine 10 Würfel rein.

public GameObject [] CubesOneToTen = new GameObject[10]; // dem Array gleich eine Größe verpasst. Lässt sich aber auch noch ändern

 

Link to post
Share on other sites

Ich frage mich wie ich das mache: wenn ich an einem bestimmten Zeitpunkt stehe, dass es dann neue Prefabs/weiter generiert.

public class RandomCubes : MonoBehaviour
{


    
    public GameObject[] CubesOneToTen = new GameObject[10];
    void Start()
    {

        for (float x = 0; x <= 10; x += 1)
        {
            var randomCube = CubesOneToTen[Random.Range(0, CubesOneToTen.Length)];
            Instantiate(randomCube, new Vector3(x, 0, 0), Quaternion.identity);
        }
    }

 

Joscupe

Link to post
Share on other sites

Kennt da jemand eine Lösung für. Ich habe es mit schleifen probiert (Bei denen ich nicht weiss, ob sie Korrekt sind) was aber nicht funktionierte. Leider.

BIn ich da mit den Schleifen auf dem Holzweg? Ich freue mich auf eure Lösungen.

Joscupe

Link to post
Share on other sites

Hallo

 

Zeitpunkt heißt Zeit? Also nach beispielsweise 10 Sekunden soll was Neues generiert werden?

 

Wenn ja, könntest du es probieren:

float _time = 0f;
float _timeYouWant = 10f;

private void Update()
{
	_time += Time.delatTime;
	if(_time > _timeYouWant)
	{
		//MAch hier, was du willst
		_time = 0;
	}
}

 

Christoph

Link to post
Share on other sites

Hallo

 

Dann musst du wahrscheinlich die x-Koordinate des transform deines Spielers prüfen:

 

private void Update()
{
	if(transform.x > _deinWert)
	{
		//mach, was immer du willst
	}
}

 

So ganz grundsätzlich.

 

Christoph

Link to post
Share on other sites

Also ich habe das jetzt so versucht und dran rumgetüftelt aber es funktioniert nicht. Ich versuchte es so das wen sich die x Position des Spielers grösser ist als die x Position des Prefabs soll es 10 neue, zufällig generierte Würfel zu generieren. Aber es funktioniert einfach nicht.

public class RandomCubes : MonoBehaviour
{
    public GameObject player;
    public GameObject[] CubesOneToTen = new GameObject[10];
    public float xAxis = 0;
    void Start()
    {


    }

    void Update()
    {
        if (player.transform.position.x > xAxis)
        {
            for (float x = 0; x <= (x + 10); x += 1)
            {
                var randomCube = CubesOneToTen[Random.Range(0, CubesOneToTen.Length)];
                Instantiate(randomCube, new Vector3(x, 0, 0), Quaternion.identity);
                xAxis = x;
            }
        }
    }
}

 

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...