Jump to content
Unity Insider Forum

Unendlich Welt


Kojote

Recommended Posts

Grüße!

Mal ne Frage, man sieht es ab und an immer mal wieder - die unendliche Welt. Man rennt immer weiter nach Westen und irgendwann kommt man wieder am Osten heraus. Man wird also irgendwie von der westlichen Seite der Karte an die östliche Seite der Karte teleportiert, ohne das man es merkt. Die Welte bzw. das Terrain ist wie eine Kugel, egal wo man hin rennt, man kommt immer wieder an der Gegenüberliegenden Seite heraus.

So etwas würde ich gern umsetzen, hoffe mal ich hab mich net zu umständlich ausgedrückt.

Problem ist, ich weiß nicht einmal wie dieses Funktion / System heißt. Hat einer ne Ahnung, nach was für Stichworten ich da bei Google suchen soll?

Beispiel wäre das Spiel: MANA - Der Weg der schwarzen Macht

Grüße von Kojote

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich kenne dieses Verfahren vom "Parallax Scrolling" 2D. Der Spieler läuft hier ja nur von links nach rechts. Man nimmt dabei eine bestimmte Anzahl von Hintergrundplanes (Texturen) (beispielsweise 3) um die 2D-Landschaft zu bilden. Wenn der Spieler nun die Position zwischen der 2. und 3. Plane erreicht, dann wird die 1. Plane wieder vor die 3. gesetzt. Dies macht man nun immer wieder und somit kann der Spieler nie den rechten Rand erreichen:

 p
123
 231
  312
   123
    p

* p = Position Spieler
* 1 = einzelne Texturplane
* 123 = 3 Texturplanes hintereinander (2D Landschaft)

Das Ganze kann man nun auch in 4 Richtungen machen und dabei nicht Planes sondern ganze 3D-Terrain(segmente) umsortieren (neu setzen).

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ja das kenne ich auch, den Thread hab ich vorhin gelesen.^^

Es verhällt sich etwas anders, ich hab mal ne Skizze angehangen. Schwarz sollen andere NPCs sein, Rot ist der Spieler, Grün wäre die Laufrichtung und das Blaue wäre sein Sichtfeld.

Es verhällt sich nun so, dass wenn der Spieler an den "Rand" der Karte kommt (links) er wieder irgendwann auf der anderen Seite erscheint (rechts). Deswegen auch das Blickfeld. Ich hab nun mittlerweile was in die Richtung gefunden, nennt sich "Spherial Terrain" man läuft also um eine Kugel drum herum. Geh ich von einem Punkt aus und umrunde die Kugel, komm ich irgendwann wieder, so fern ich immer gerade aus gehe, wieder am selben Punkt an.

Damit hätte ich schon mal den Namen, wie ich es umsetze ist das andere Problem. Eine Kugel erstellen, die Gravitation ändern und den Charkter drüber rennen lassen, geht recht einfach. Jedoch nun die Kugel als Terrain bearbeiten das andere und große Probem derzeit!

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Wenn du die obige Methode verwendest, dann kommt der Spieler auch wieder an seiner Ursprungsposition an. Da gibt es keinen Unterschied zu der Bewegung auf einer Kugel. Der einzige Unterschied ist, daß du keine Horizontkrümmung hast und keinen Horizont in dem Sinne, daß beispielsweise Gebäude dahinter verschwinden.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Die NPCs werden mit den Terrainsegmenten umgesetzt und da die NPCs ab einer gewissen Entfernung nicht mehr angezeigt werden, fällt dem Spieler das Umsetzen der NPCs auch nicht auf. Die Segmente müsse natürlich groß genug sein, damit dieses "Umschichten" dem Spieler nicht auffällt.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Naja so ein Script in der Art hab ich schon, falls dichs interessiert, ich habs mal in den Anhang gelegt. Das Script wird nur aufs Terrain gelegt, der Spieler zugewiesen und los gehts. Problem hierbei ist jedoch, du rennst unendlich und kommst nie wieder da an, wo du warst.

Des weiteren, NPC war vielleicht nen doof gemeiter Begriff, ich wollte es für mehrere Nutzer machen. Es rennen also mehrere Spieler auf der Karte herum, dem NPC würde es nun nichts ausmachen teleportiert zu werden, anderen Mitspielern vermutlich schon.^^

InfiniteTerrain.cs

Link zu diesem Kommentar
Auf anderen Seiten teilen

Eine echte "Kugelwelt" würde ich nur verwenden, wenn deine Welt sehr klein sein soll und wenn man wirklich das "Gefühl" haben soll auf einer Kugel zu laufen. Der große Nachteil dann ist aber, daß du kein Unity-Terrain mehr verwenden kannst. Es gibt dafür allerdings auch spezielle Shader, die eine "Kugelwelt" auch auf einer flachen Welt simulieren.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Wie gesagt, richtig programmiert und du kommst wieder dort an wo du gestartet bist...
Und das es bei einem Multiplayerspiel nicht funktioniert ist ein Trugschluss. Umsortiert wird nur auf dem Client und nicht auf dem Server. Aber natürlich ist das Ganze nicht trival.
Somit hat jeder Client seine eigene "umsortierte" Welt.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Wie gesagt, wenn du keine Unity-Terrains verwenden willst, dann kannst du auch den anderen den Weg gehen. Ansonsten wäre der Weg - wie ich ihn dir beschrieben habe - und ich bin mir zu 90% sicher das dies ein gangbarer Weg ist.

Solltest du eine Kugel verwenden, dann könntest du auf die Kugeloberfläche eine Mesh-Deformation anwenden. Diese Deformation wird bspw. über eine Highmap erzeugt (gibt da wieder Skripte für im Netz). Dann müsst du nur noch Vegetation auf diese Oberfläche bekommen, da gibt es auch wieder Assets für. Vor allem Gras benötigt ein spezielles Asset.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Du kannst dir die Methode auch so vorstellen:
1) Man nimmt eine Kugel und legt dafür eine bestimmte Größe fest (in Relation zu der Quadrantengröße)
2) Du legst eine bestimmte Größe für deine Quadranten fest
3) Du legst die Quadranten auf die Kugeloberfläche (Projektion)

Anhand der Position des Spielers (auf dem Client) wird nun die individuelle Sicht des Spielers auf der Kugel berechnet und die passenden Quadranten um den Spieler herum positioniert.. (ich habe leider keinen Quellcode dafür, aber es ist mathematisch lösbar)
https://de.wikipedia.org/wiki/UV-Koordinaten#/media/File:UVMapping.png

Aber ich vermute einmal, die Welt muss nicht eine perfekte Kugel sein, es sollte auch ein Würfel reichen und damit wird das ganze wieder viel einfacher ...
https://de.wikipedia.org/wiki/UV-Koordinaten#/media/File:Cube_Representative_UV_Unwrapping.png

Auch wenn du einen Würfel umrundest kommst du wieder bei deiner Ausgangsposition an und der Spieler merkt nicht wirklich ob seine Welt eine Sphere oder ein Würfel ist .

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich denke dieses Asset sollte den Job auch tun, aber ich kenne es nicht. Zumindest behauptet es eine "loopable world" erstellen zu können:
https://www.assetstore.unity3d.com/en/#!/content/36486

Hier ist noch eine Methode mit 9 (seamless tiling) Quadranten beschrieben (ich denke diese Methode ist einfacher als die Methode mit dem Cube die ich oben beschrieben habe):
http://answers.unity3d.com/questions/626777/endless-terrain-loop.html

Link zu diesem Kommentar
Auf anderen Seiten teilen

Am 22.7.2017 um 18:13 schrieb Kojote:

Jetzt hab ich aber zu lesen, danke! :)

Wenns nur darum geht ;-), auf dieser Seite findest du alles, was du benötigst. Dann mußt du es "nur noch" zu deinem Spiel zusammenbauen. Es sieht viel schwieriger aus, als es letztendlich ist. Zero hat dir ja auch schon Ansätze gegeben.

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 23 Stunden schrieb HortusLongus:

Wenns nur darum geht ;-), auf dieser Seite findest du alles, was du benötigst. Dann mußt du es "nur noch" zu deinem Spiel zusammenbauen. Es sieht viel schwieriger aus, als es letztendlich ist. Zero hat dir ja auch schon Ansätze gegeben.

Erst mal vielen Dank, die Tutorials sind Hammer! :) Jedoch, dass was ich Suche finde ich nicht, welches Tutorial meinst du?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

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

×
×
  • Neu erstellen...