Benutzer-Werkzeuge

Webseiten-Werkzeuge


theorie:programmieren

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
theorie:programmieren [2023/03/10 10:17] – Kapitel umsortieren spielzimmertheorie:programmieren [2023/03/10 10:36] (aktuell) – [Vorhandene Variablen benutzen] unity link spielzimmer
Zeile 54: Zeile 54:
 In einem Spiel möchte ich ja nicht nur schicke Bytes im Speicher stehen haben, sondern es soll sich etwas am Bildschirm bewegen. In einem Spiel möchte ich ja nicht nur schicke Bytes im Speicher stehen haben, sondern es soll sich etwas am Bildschirm bewegen.
  
-Nehmen wir an ich habe ein Unity Projekt und eine schicke Szene zusammengeklickt. Dabei hat Unity für jedes Element ein [[https://docs.unity3d.com/Manual/GameObjects.html|GameObject]] angelegt, das ist so ein komplexer Datenklumpen den wir benutzen dürfen. Dazu klicken wir in Unity [[https://docs.unity3d.com/Manual/CreatingAndUsingScripts.html|"Skript Komponente hinzufügen"]] und uns wird ein praktisches Code Gerüst angelegt. Das dürfen wir zum Spielen benutzen. Wir recherchieren, dass die Position eines GameObject in der [[https://docs.unity3d.com/Manual/class-Transform.html|Transform-Komponente]] gespeichert wird und wir dessen Position verändern können, um unser Element herumzubewegen. In den [[https://docs.unity3d.com/ScriptReference/Transform.html|Unity Docs]] steht dieser Beispiel Code:+Nehmen wir an ich habe ein [[https://unity.com|Unity]] Projekt und eine schicke Szene zusammengeklickt. Dabei hat Unity für jedes Element ein [[https://docs.unity3d.com/Manual/GameObjects.html|GameObject]] angelegt, das ist so ein komplexer Datenklumpen den wir benutzen dürfen. Dazu klicken wir in Unity [[https://docs.unity3d.com/Manual/CreatingAndUsingScripts.html|"Skript Komponente hinzufügen"]] und uns wird ein praktisches Code Gerüst angelegt. Das dürfen wir zum Spielen benutzen. Wir recherchieren, dass die Position eines GameObject in der [[https://docs.unity3d.com/Manual/class-Transform.html|Transform-Komponente]] gespeichert wird und wir dessen Position verändern können, um unser Element herumzubewegen. In den [[https://docs.unity3d.com/ScriptReference/Transform.html|Unity Docs]] steht dieser Beispiel Code:
  
 <code csharp> <code csharp>
Zeile 80: Zeile 80:
 Ein Datenklumpen namens "child" hat also die Eigenschaft "position", zu der ich einen [[https://docs.unity3d.com/ScriptReference/Vector3.html|Vector3]], also einen dreidimensionalen Richtungspfeil, dazuzählen will. Das klingt ja schon mal nach herum bewegen. Ein bisschen Recherche später finden wir heraus, dass [[https://docs.unity3d.com/ScriptReference/Vector3-up.html|Vector3.up]] bedeutet (0,1,0), also aufwärts. Wenn wir (0,1,0) mal 10 rechnen, dann kommt (0, 10, 0) heraus. Wir wollen die Position also um 10 Schritte nach oben bewegen. Ein Datenklumpen namens "child" hat also die Eigenschaft "position", zu der ich einen [[https://docs.unity3d.com/ScriptReference/Vector3.html|Vector3]], also einen dreidimensionalen Richtungspfeil, dazuzählen will. Das klingt ja schon mal nach herum bewegen. Ein bisschen Recherche später finden wir heraus, dass [[https://docs.unity3d.com/ScriptReference/Vector3-up.html|Vector3.up]] bedeutet (0,1,0), also aufwärts. Wenn wir (0,1,0) mal 10 rechnen, dann kommt (0, 10, 0) heraus. Wir wollen die Position also um 10 Schritte nach oben bewegen.
  
-Und genau so hangelt man sich in der Dokumentation vorwärts. Von der kompletten Ahnungslosigkeit zu "das hab ich doch schon mal irgendwo gehört...". Es ist für Menschen nicht möglich zu erraten, was mit "Vector3" oder "Transform" gemeint ist. Das sind Datenklumpen, die Unity erfunden hat. Wir haben dem Computer gesagt er soll Unity benutzen, also müssen wir in der Unity Dokumentation nachschauen wie sie ihre Variablen genannt haben.+Und genau so hangelt man sich in der Dokumentation vorwärts. Von der kompletten Ahnungslosigkeit zu "das hab ich doch schon mal irgendwo gehört...". Es ist für Menschen nicht möglich zu erraten, was mit "Vector3" oder "Transform" gemeint ist. Das sind Datenklumpen, die Unity erfunden hat. Wir haben dem Computer gesagt er soll Unity benutzen, also müssen wir in der Unity Dokumentation nachschauen wie sie ihre Variablen genannt haben und was wir mit ihnen machen können.
  
  
Zeile 179: Zeile 179:
  
 Noch lustiger wird es dann natürlich mit [[https://docs.unity3d.com/ScriptReference/Input.GetAxis.html|User Input]]. Wenn du die Unity Doc Beispiele dazu benutzt, dann stelle bitte von Update auf FixedUpdate um und wirf den Time.deltaTime Krempel raus. FixedUpdate ist für saubere Bewegungen zuständig und regelt die vergangene Zeit selbst. Update ist für saubere Anzeige zuständig, nicht für Mechanik Berechnungen. Noch lustiger wird es dann natürlich mit [[https://docs.unity3d.com/ScriptReference/Input.GetAxis.html|User Input]]. Wenn du die Unity Doc Beispiele dazu benutzt, dann stelle bitte von Update auf FixedUpdate um und wirf den Time.deltaTime Krempel raus. FixedUpdate ist für saubere Bewegungen zuständig und regelt die vergangene Zeit selbst. Update ist für saubere Anzeige zuständig, nicht für Mechanik Berechnungen.
 +
 +In unser Beispiel Spieler Skript eingebaut schaut das dann so aus:
 +
 +<code csharp>
 +using UnityEngine;
 + 
 +public class ExamplePlayer : MonoBehaviour
 +{
 +    private int lebenspunkte;
 +    
 +    public float speed = 10.0f;
 +    public float rotationSpeed = 100.0f;
 + 
 +    void Start()
 +    {
 +        this.lebenspunkte = 100;
 +    }
 + 
 +    void FixedUpdate()
 +    {
 +        // Get the horizontal and vertical axis.
 +        // By default they are mapped to the arrow keys.
 +        // The value is in the range -1 to 1
 +        float translation = Input.GetAxis("Vertical") * speed;
 +        float rotation = Input.GetAxis("Horizontal") * rotationSpeed;
 +
 +        // Move translation along the object's z-axis
 +        transform.Translate(0, 0, translation);
 +
 +        // Rotate around our y-axis
 +        transform.Rotate(0, rotation, 0);
 +        
 +        
 +        //Hier prüfe ich eigentlich, ob der Spieler gerade irgendwo steht wo er Schaden nimmt.
 +        //Um das Beispiel kurz zu halten habe ich eine giftige Atmosphäre die ständig Schaden macht.
 +        int schaden = 13;
 +        lebenspunkte -= schaden;
 + 
 +        //Wenn der Spieler keine Lebenspunkte mehr hat, zum Game Over Screen wechseln.
 +        if (lebenspunkte <= 0)
 +        {
 +            //Game Over
 +        }
 +        else
 +        {
 +            //Lebenspunkte Anzeige aktualisieren
 +        }
 +    }
 +}
 +</code>
 +
 +Und so basteln wir am Code weiter und weiter. Für die ersten Minispiele ist es völlig in Ordnung, wenn noch alles im Player Skript steht. Je größer ein Spiel wird, desto [[patterns|komplizierter]] müssen wir den Code strukturieren. Also halte deine ersten Versuche klein und freunde dich mit dem Programmieren im Zusammenspiel mit Unity an.
  
 Viel Spaß! Viel Spaß!
theorie/programmieren.1678439859.txt.gz · Zuletzt geändert: 2023/03/10 10:17 von spielzimmer

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki