Jump to content
Unity Insider Forum

Iso Ansicht Bewegung Player


Schokokeks15

Recommended Posts

Hallo zusammen,

habe ein paar kurze Frage, denn ich bin beim durchsuchen des Forums und von Google nicht fündig geworden (eventuell ist auch nur meine Brille dreckig)...

Ich bin absoluter Anfänger in Unity, habe aber schon so einiges mit dem Survival Tutorial gelernt. Aber ich verstehe noch einige Sachen nicht ganz und brauche daher dringend ein paar Anregungen von Euch:

1. Im PlayerMovement-Script steht unter anderem das hier:

void FixedUpdate ()
        {
            // Store the input axes.
            float h = CrossPlatformInputManager.GetAxisRaw("Horizontal");
            float v = CrossPlatformInputManager.GetAxisRaw("Vertical");

            // Move the player around the scene.
            Move (h, v);

            // Turn the player to face the mouse cursor.
            Turning ();

            // Animate the player.
            Animating (h, v);
        }


        void Move (float h, float v)
        {
            // Set the movement vector based on the axis input.
            movement.Set (h, 0f, v);
            
            // Normalise the movement vector and make it proportional to the speed per second.
            movement = movement.normalized * speed * Time.deltaTime;

            // Move the player to it's current position plus the movement.
            playerRigidbody.MovePosition (transform.position + movement);
        }

Frage: Wenn ich die Kamera auf Position -5, 8, -8, Rotation 45, 45, 0 stelle, habe ich eine schöne ISO-Perspektive. Wenn ich nun "W" drücke, möchte ich, das mein Player wirklich nach "Norden" läuft und nicht nach "NordOst". Also nicht entlang der X-Achse. War das verständlich beschrieben? ;-)

2. Wenn ich mir einen Level im 3D-Modus zusammen bastle (nehmen wir als Beispiel für die Ansicht das "alte" Spiel "Crusader No Regret" oder "Syndicate" ), würdet Ihr in Blender den gesamten Level bauen und dann komplett importieren, oder nur die Böden und Wände und dann die Objekte dazu, oder alles als ein Tile erstellen und einfügen? Inwieweit würdet ihr mit den Cubes und Planes in Unity arbeiten und nur die Texturen drauf packen? Oder alles in 3D-Programmen wie Blender erstellen und importieren?

Vielen Dank und bitte nicht hauen, wegen diesen dummen Fragen.

Euch noch einen schönen Samstag,

-Schokokeks

Forumfrage.JPG

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 31 Minuten schrieb Schokokeks15:

Frage: Wenn ich die Kamera auf Position -5, 8, -8, Rotation 45, 45, 0 stelle, habe ich eine schöne ISO-Perspektive. Wenn ich nun "W" drücke, möchte ich, das mein Player wirklich nach "Norden" läuft und nicht nach "NordOst". Also nicht entlang der X-Achse.

Das ist jetzt nicht so richtig Anfängerkram mehr, aber die beste Methode imo ist:

  1. Du hast einen Kamera-Pivot-Punkt. Das ist ein leeres GameObject, das dem Spieler folgt und ausschließlich um die vertikale Achse gedreht ist. Die Kamera ist diesem Objekt untergeordnet und nur nach oben oder unten geneigt. Die X-Komponente der lokalen Kamera-Position bleibt immer 0. Wenn du also deine Kamera drehst (so wie du es jetzt schon gemacht hast), dann indem du dieses übergeordnete Objekt drehst - und die Kamera dreht sich mit. Stell dir einen Selfie-Stick vor, und das Objekt, von dem ich rede, ist quasi das Handgelenk, das diesen hält.
  2. Du erstellst ein Feld in deinem Bewegungsscript, wo du dieses Objekt reinziehen kannst:
    public Transform cameraPivot;
  3. Nachdem du das Pivot-Objekt da hineingezogen hast, baust du diesen Code direkt hinter "movement.Set(...);" ein:
    movement = cameraPivot.TransformDirection(movement);

Was diese letzte Zeile macht ist, dass aus einem "World Space"-Vektor ein "Local Space"-Vektor wird. Wenn du dir eine Landkarte als Welt vorstellst, dann entspricht "vorne" vermutlich Norden. Ohne diese Zeile geht dein Charakter immer nach "Norden", auch wenn es ja hier nicht wirklich Himmelsrichtungen gibt. Das wäre "World Space". "Local Space" bedeutet, dass du ein Objekt hast, und davon nach "vorne" gehst, statt nach Norden. Und dieses Objekt ist in diesem Fall der Kamera-Pivot. "Vorne" bedeutet jetzt "da, wo dieses Objekt hinzeigt".

vor 41 Minuten schrieb Schokokeks15:

Wenn ich mir einen Level im 3D-Modus zusammen bastle (nehmen wir als Beispiel für die Ansicht das "alte" Spiel "Crusader No Regret" oder "Syndicate" ), würdet Ihr in Blender den gesamten Level bauen und dann komplett importieren, oder nur die Böden und Wände und dann die Objekte dazu, oder alles als ein Tile erstellen und einfügen?

Geht theoretisch beides. Insbesondere, weil du in Blender ja auch mit verschiedenen Objekten arbeitest und nicht alle Geometrie in ein Objekt reinschmeißt. Jedes Objekt in Blender wird dann jeweils ein Objekt in Unity. Ich für meinen Teil find's ganz gut, wenn ich beim Spieltest merke, dass etwas geändert werden soll, und ich das dann direkt in Unity tun kann, statt dass ich da erstmal Blender holen, die Änderung speichern und in Unity importieren muss. Davon abgesehen weiß ich nicht, ob man in Blender vernünftig Objekte wiederverwenden kann - jedenfalls, wenn das Ziel ist, dass diese Mehrfachverwendung auch in Unity ankommt. Standardmäßig kannst du eine Form in Blender kopieren und in Unity hast du dann zweimal dasselbe Ding, anstatt das eines wiederverwendet wird. Keine Ahnung, ob man da etwas gegen tun kann, und wie gut das dann ginge.

Ich würde also eher Einzelteile bauen und das Level in Unity designen. Da kann man eh viel besser Greyboxen.

vor 45 Minuten schrieb Schokokeks15:

Inwieweit würdet ihr mit den Cubes und Planes in Unity arbeiten und nur die Texturen drauf packen? Oder alles in 3D-Programmen wie Blender erstellen und importieren?

Naja, wenn das Spiel so aussehen soll, dann kann man das machen, sonst halt nicht. Wenn dein Spiel aus Cubes besteht, warum dann das Rad... äh, den Cube neu erfinden? Es sei denn, du brauchst eine andere UV Map... :)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo Sascha,

vielen Dank für Deine sehr ausführliche Antwort.
Diese hilft mir auf jeden Fall weiter. Ich bin zwar noch am grübeln, was Du genau mit "in das Feld reinziehen" meinst, aber ich komme schon noch dahinter.

Denn wenn ich einfach nur deine beiden Codezeilen in das Script für die Player-Bewegung einbaue, passiert auf Tastendruck leider gar nichts. Eventuell ist es aber auch zu spät und ich habe etwas ganz wesentliches übersehen...

Nochmals vielen Dank und Dir noch einen schönen Samstag Abend,

Schokokeks

Link zu diesem Kommentar
Auf anderen Seiten teilen

HeyHo... ich hab´s hinbekommen!!! Und mein Lernniveau ist mächtig gestiegen! Vielen Dank nochmal!!!

 

Musste dem leeren Gameobjekt die Position und Rotation der Kamera geben. Dann bei der Kamera die Werte auf 0. Bei Player Pivot das neue GameObjekt rein ziehen (das meintest Du vorhin^^), und das Movement-Script anpassen, wie Du es oben angegeben hattest. Habe ich was vergessen?^^

Danke Dir und noch ein schönes Wochenende.

Und die nächsten Fragen von mir kommen bestimmt... 😉

Viele Grüße,

Schokokeks

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich finde es übrigens super, dass Du zum lernen anregst und nicht einfach etwas machst und postest, weil Du weißt wie es geht, sondern nur den Tritt in die richtige Richtung angibst und auch noch eine gute und logische Erklärung dazu abgibst. Das machen hier bestimmt auch viele andere Mitglieder so. Aber ich wollte das mal gesagt haben. Denn nur so lernt man was und ist nicht nur die ganze Zeit am kopieren und einfügen...

Nochmals vielen Dank,

Schokokeks

 

PS: Beatboxing kenne ich, aber Greyboxing muss ich googeln... 🙂 🙂 🙂 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo nochmal,


stellen wir uns nochmal ein Spiel wie "Syndicate" vor. Es gibt Häuser, Straßen, Lampen etc. Dinge, die sich eigentlich (!) wiederholen.

Im Orginal ein Tileset, wo ich mir was zusammenstellen kann. Aber, um bei dem Beispiel zu bleiben, ich möchte nicht einfach ein Straßen-Tlle neben ein anderes packen, wo eins wie das andere aussieht (wenn es z.B. eine lange Straße ist), sondern mal da einen Abfluss einbauen, dort ein Schlagloch und ich möchte über einen Teil der Straße eine Bremsspur einbauen. Aber nur da, wo ich will. Es kann ja mehrere Straßen geben. Im Laufe der Länge der Straße soll sich auch die Textur ändern... All das, unabhängig von der Größe oder Länge der Straße...

Mache ich das am effektivsten über viele, viele Renderings in meinem 3D-Programm und zahllose Tiles, oder erstelle ich in meinem 3D-Programm die ganzen Strassen (wobei die Texturgröße ein Problem werden könnte, oder gibt es eine andere Möglichkeit? Indem ich z.B. in Unity 1km Straße als Cube erzeuge und die Textur darauf verteilen kann?) Am besten gleich mit dem Gehweg dazu? Weil der sieht ja wieder ganz anders aus... 😉 

Ich hoffe, das ist nicht zu theoretisch. Mir geht es um den effektivsten Ablauf dabei.

Vielen herzlichen Dank und nicht hauen. Ich habe vor dieser Frage hier viel recherchiert und keine Antwort gefunden die sagt "Ja, Nein, SoundSo"... Es geht mir einfach um das Verständnis.

Nochmals Danke und ein schönes Wochenende,

Schokokeks

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

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

×
×
  • Neu erstellen...