Grundlagen eines simplen Sonnensystems in Unity3d

in #unity3d7 years ago

Für ein kleines Projekt brauchte ich das Modell von unserem Sonnensystem.
Als Besonderheit hier, alle Planeten befinden sich auf gleicher y Koordinate, also auf gleicher Höhe. Das kann man mit ein paar kleinen Änderungen aber schnell anpassen. Ausserdem rotieren die Planeten nicht elipsisch sonder rund um die Sonne. Das wäre eine etwas größere Änderung.
Die weiteren Daten zu den einzelnen Planeten, wie Größe, Geschwindigkeit, Rotation, durchschn. Abstand zur Sonne etc. habe ich mir dann von Wikipedia gezogen.
Für die Monde kann man das ganze im kleinen so auf die Planeten runterbrechen.

Zuerst einmal das Script für die Rotation:

using UnityEngine;
using System.Collections;

public class PlanetRotation : MonoBehaviour {

    public float AnzTageUmdrehung;
    public bool Linksdrehend = false;

    // Use this for initialization
    void Start () {
    
    }
    
    // Update is called once per frame
    void Update () {
        if (!Linksdrehend) {
                        transform.Rotate (Vector3.down * Time.deltaTime * (182.5F / AnzTageUmdrehung));
                } else {
            transform.Rotate (Vector3.up * Time.deltaTime * (182.5F / AnzTageUmdrehung));
        }
    }
}

AnzTageUmdrehung sagt hier wie lange ein Planet, gemessen in Erdzeit, braucht, um einmal um sich selbst zu rotieren.
Linksdrehend sagt, ob sich der Planet links oder rechts herum dreht.

mars2.PNG
(1 Tag für den Mars ist hier natürlich nicht der korrekte Wert. Richtig wäre 24 h 37 min 22 s - aber da war mir das ausrechnen der Dezimalzahl zu lästig XD )

Nun das Script für den Umlauf um die Sonne:

using UnityEngine;
using System.Collections;

public class UmlaufSonne : MonoBehaviour {

    public float AnzTageUmdrehungSonne;
    public float FaktorVerschiebung;
    private Vector3 pos;

    public GameObject Planet;

    // Use this for initialization
    void Start () {
        
    }
    
    // Update is called once per frame
    void Update () {
    
        pos = Planet.transform.position;

        if (transform.rotation.y >= 180) {
                pos.z -= FaktorVerschiebung;
        } else {
                pos.z += FaktorVerschiebung;
        }

        Planet.transform.position = pos;
        transform.Rotate(Vector3.down * Time.deltaTime * (182.5F / AnzTageUmdrehungSonne));
    }
}

AnzTageUmdrehungSonne zeigt an, gemessen in Erdzeit, wie lange ein Planet braucht, um einmal um die Sonne zu kreisen.
pos ist die Position des Planeten im Koordinatensystem
FaktorVerschiebung ist ein Korrekturwert

mars.PNG
(Mars)

Merkur.PNG
(Merkur vor der Sonne)


Ihr dürft das ganze natürlich frei nutzen, ändern und verwenden.
Wer Änderungen und/oder Verbesserungen zu o.g. Script hat, darf mir die natürlich gerne mitteilen.
Wer das Script nutzt darf mich gerne in seinen Credits als BroPowerGames aufführen. XD
BroPower_1920x1080_001.png

Sort:  

Hey coole Sache. @flurgx könnte das auch interessieren. Ich schaue auf den Code und verstehe gerade nur die Hälfte. Kommende Woche gehts wieder weiter mit Grundlagen der Programmierung. Tolle Arbeit!

Die Scripte snd auf Unity3d ausgelegt. Einige Dinge funktionieren ohne die Engine alleinstehend für sich natürlich nicht. Aber die Basics in C# sind dann doch identisch.

Sehr schönes Tutorial. Gut geschrieben, einfach, kurz, verständlich :)
Wäre schon mehr Tutorials über unity in diesem stil zu sehen :p

Ein paar kleine Tutorials hab ich ja noch gemacht. Ich denke ich werde auch in Zukunft die ein oder andere Sache zu Unity3d hier posten. Ich möchte hier auch nicht komplette Projekte oder Assets anpreisen, sondern eher anderen Ideen und Denkanstöße liefern, um ihre eigenen Projekte umzusetzen.
Die von mir hier gezeigten Scripte sind jeweils nur der Anfang und leicht erweiterbar.

Wenn Du Themen hasat, die dich in dem Bereich interessieren, geb mir einfach bescheid. Wenn ich da helfen kann, versuche ich das gern.

Was mir noch vorschwebt ist ein Tutorial zu einem Tag-Nacht-Zyklus.

Coin Marketplace

STEEM 0.27
TRX 0.21
JST 0.038
BTC 97072.41
ETH 3703.24
USDT 1.00
SBD 3.90