STU Geschrieben 26. September 2020 Melden Share Geschrieben 26. September 2020 Hi, ich habe eine Kartenübersicht erstellt. Nun würde ich gerne, dass mein Charakter einen vordefinierten Weg abläuft wenn man ein Ziel anklickt. Wie kann ich einen Weg/ Linie beschreiben und diese dann ablaufen? Danke Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 26. September 2020 Melden Share Geschrieben 26. September 2020 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 More sharing options...
STU Geschrieben 27. September 2020 Autor Melden Share Geschrieben 27. September 2020 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 More sharing options...
Sascha Geschrieben 27. September 2020 Melden Share Geschrieben 27. September 2020 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 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 More sharing options...
STU Geschrieben 28. September 2020 Autor Melden Share Geschrieben 28. September 2020 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 More sharing options...
Sascha Geschrieben 28. September 2020 Melden Share Geschrieben 28. September 2020 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 More sharing options...
STU Geschrieben 28. September 2020 Autor Melden Share Geschrieben 28. September 2020 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 More sharing options...
Sascha Geschrieben 28. September 2020 Melden Share Geschrieben 28. September 2020 Ich sehe da nichts, was irgendwie schief gehen könnte. Schau mal hier: Könnte auch hier eine Exception sein. Ansonsten: http://blog.13pixels.de/2019/things-that-can-make-a-difference-in-unitys-play-mode-compared-to-your-build/ Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Recommended Posts
Archiviert
Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.