Jump to content
Unity Insider Forum

bestimmten Weg ablaufen


STU

Recommended Posts

Du kannst mehrere Punkte definieren; entweder durch mehrere GameObjects oder durch eine Liste an Vector3 auf einer Komponente. Dann kannst du deinem Charakter ein Script geben und ihn diese Punkte ablaufen lassen. Du merkst dir in einem Feld den aktuellen nächste Zielpunkt und schaust einfach in jedem Frame, ob der erreicht ist. Wenn ja, setzt du den Nachfolgepunkt als nächstes Ziel, wenn nein, läufst du auf den aktuellen Punkt weiter zu.

Komplizierter wird es (und da bin ich mir bei deinem Pist nicht sicher, ob du das meinst), wenn du ein Netzwerk hast - also mehrere mögliche Start- und Zielpunkte hast. Da willst du eher nicht bei allen Kombinationen per Hand eintragen, wie der Weg aussehen soll. Da brauchst du dann einen Pathfinding-Algorithmus. Interessantes Feld, die Dinger, aber vielleicht nichts, wo jeder drauf Lust hat :) Gibt zum Glück ein paar (auch kostenlose) Pakete dafür. Und im Zweifelsfall kann man sich immer NavMeshes anschauen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi, 

danke für die Tipps. Ich habe es jetzt einfach mal über Wegpunkte gemacht. Dafür ein Array angelegt dort die Punkte als GameObject hineingepackt. Läuft auch alles soweit. 

 

public Transform[] waypoints;
transform.position = Vector2.MoveTowards(transform.position, myWayPoints.waypoints[waypointIndex].position, speed * Time.deltaTime);


            if (Vector2.Distance(transform.position, myWayPoints.waypoints[waypointIndex].position) < 0.1f)
            {
                if (waypointIndex < myWayPoints.waypoints.Length - 1)
                { waypointIndex++; }

meine Frage aber jetzt. Ich möchte diesen Teil (    myWayPoints.waypoints[waypointIndex].position    ) als Variable haben, da ich ja jetzt weiter Laufen möchte zu einem weiteren Punkt. Da hänge ich jetzt aber irgendwie. Wie kann ich ein Array in ein anderes übertragen?

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor einer Stunde schrieb STU:

Wie kann ich ein Array in ein anderes übertragen?

Ich weiß nicht so richtig, was du damit meinst, aber was auch immer es ist... es ist nicht das, was du tun willst :D

vor einer Stunde schrieb STU:

Ich möchte diesen Teil (    myWayPoints.waypoints[waypointIndex].position    ) als Variable haben, da ich ja jetzt weiter Laufen möchte zu einem weiteren Punkt

Verstehe ich nicht. Wo ist das Problem beim aktuellen Code?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich bin nicht besonders gut im beschreiben 😅

Der Code funktioniert soweit. Der Spieler läuft von Start zu Ziel1. Nun Soll er von Ziel1 zu einem weiteren Ziel2 Laufen. Somit müsste ich das ganze einfach wiederholen mit einem anderen Array. Meine Grundidee wäre zu sagen, ich lasse es einfach alles wie es ist und je nachdem wo sich gerade der Spieler befindet hat das Array "waypoints" einen anderen Inhalt. Somit müsste ich dieses wie eine Variable behandeln und ändern können.

MyWayPinots.waypoints01[ ]

MyWayPinots.waypoints02[ ] 

 

if (Payer == firstLevel)

targetArray[ ] = MyWayPinots.waypints01[ ]

...

 

transform.position = Vector2.MoveTowards(transform.position, targetArray[waypointIndex].position, speed * Time.deltaTime);

 

Irgendwie so, oder ist der Ansatz komplett daneben? 

 

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor einer Stunde schrieb STU:

Ich bin nicht besonders gut im beschreiben 😅

Das ist okay, aber ich kann dir versprechen: Diese Fähigkeit ist unglaublich wichtig für Softwareentwicklung. Aber keine Sorge, da wirst du unweigerlich besser drin, solange du dabei bleibst.

vor einer Stunde schrieb STU:

Der Spieler läuft von Start zu Ziel1. Nun Soll er von Ziel1 zu einem weiteren Ziel2 Laufen. Somit müsste ich das ganze einfach wiederholen mit einem anderen Array

Ich glaube (!), hier ist ein Denkfehler. Ein Array ist ein Objekt, das mehrere Variablen gleichartigen Typs hat. Wenn du ein Vector3-Array hast, dann hast du damit eine bestimmte Anzahl von Vector3-Variablen. Wenn ich das richtig verstanden habe, sind Ziel1 und Ziel2 beides einfach Positionen in der Welt. Die kannst du dann nacheinander in dein Array packen. Ändern musst du dann nur den Index.

Ich denke allerdings, wenn ich mir deinen Code so ansehe, dass du das eigentlich schon weißt. Kann also gut sein, dass ich das Problem nur nicht verstanden habe.

Hmm... kann es sein, dass du mehrere ganze Pfade haben willst? Und dann unter verschiedenen Bedingungen unterschiedliche Pfade abgehen willst? In dem Fall wäre es schon sinnvoll, wenn jeder Pfad ein Array wäre und du entsprechend mehrere davon hättest. Merke dir aber in jedem Fall als Grundregel: Wenn du mehrere Variablen hast und die heißen bis auf die Nummer am Ende alle gleich, dann ist da auf jeden Fall etwas falsch ;)

Falls du das meinst, ist der wichtige Hinweis: Arrays sind Objekte. Sie haben damit Referenzsemantik und du kannst in einer Variable erst das eine Array und dann das andere referenzieren. Ein Kopieren von Elementen ist nicht nötig. Ich glaube, das hast du in deinem Ansatz auch irgendwie schon drin.

Was du zum Beispiel machen kannst ist, ein Array von Pfaden zu machen, und jeder Pfad hat dann wiederum ein Array von Punkten. Das geht z.B. auch mit GameObjects. Du hast dann ein Pfad-Komponente und baust für jeden Pfad ein GameObject. Dann kannst du diese GameObjects referenzieren, um zu sagen: Hier ist der nächste Pfad.

Link zu diesem Kommentar
Auf anderen Seiten teilen

bei mir ist es so, dass es verschiedene Wege gibt die jeweils 10 Wegpunkte haben die nacheinander abgelaufen werden. Der Vorschlag das Array in ein weiteres Array zu packen hört sich gut an. Das werde ich versuchen 😀

Ich habe aber gerade ein anderes Problem. Wenn ich es am Rechner laufen lasse, habe ich keine Probleme. Wenn ich aber das Spiel erstelle und auf dem Handy testen möchte , geht es nicht mehr. Ich glaube das er an dieser Zelle hängen bleibt. Ich vermute mal dass es viele Ursachen haben kann. Aber vielleicht hast du einen Tipp.

transform.position = Vector2.MoveTowards(transform.position, myWayPoints.waypoints[waypointIndex].position, speed * Time.deltaTime);

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

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

×
×
  • Neu erstellen...