Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

28.12.2016, 13:20

Unity2D C# | Um einen Planeten laufen Problem


(Link)


Hallo ^^

Ich habe ein Problem, und zwar habe ich ein Spieler der von einem Planeten angezogen wird und ich bekomme es nicht gebacken das dieser Spieler sich um diesen Planeten bewegen kann. :dash:


Jar

Treue Seele

Beiträge: 197

Wohnort: Lübeck

Beruf: Softwareentwickler

  • Private Nachricht senden

2

28.12.2016, 13:50

Das Video ist privat.

Kenne mich nicht so richtig aus, aber kann man nicht in Unity die Gravity von einem Objekt ausgehend Einstellung und dann einfach in anderen Objekten (Spieler) useGravity anharken?

3

28.12.2016, 13:52

Sorry müsste jetzt Öffentlich sein :)

4

28.12.2016, 15:50

Ich bin jetzt etwas weiter gekommen aber mein nächstes Problem ist das ich vom Planeten nur noch sehr Langsam angezogen werde. :huh:



PlanetGravity.cs

C#-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
using UnityEngine;
using System.Collections;

public class PlanetGravity : MonoBehaviour {

    private float gravityForce = -20;

    public void ApplyGravity (Transform receiver) {

        Rigidbody2D rb = receiver.GetComponent<Rigidbody2D> ();
        Vector3 dirPlanetToReceiver = (receiver.position - this.transform.position).normalized;
        rb.AddForce (gravityForce * dirPlanetToReceiver);

        Vector3 dirReceiverUp = receiver.up;
        Quaternion rot = Quaternion.FromToRotation (dirReceiverUp, dirPlanetToReceiver) * receiver.rotation;
        receiver.rotation = rot;

    }

}


PlanetGravityReceiver.cs

C#-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
using UnityEngine;
using System.Collections;

public class PlanetGravityReceiver : MonoBehaviour {

    public PlanetGravity planetGravity;
    private Rigidbody2D rb;

    void Awake() {

        rb = this.GetComponent<Rigidbody2D> ();
        rb.gravityScale = 0;
        rb.freezeRotation = true;

    }

    void FixedUpdate() {

        if (planetGravity != null) {

            planetGravity.ApplyGravity (this.transform);

        }

    }

}


PlayerController.cs

C#-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
using UnityEngine;
using System.Collections;

public class PlayerController : MonoBehaviour {

    private Rigidbody2D rb;
    private float moveSpeed = 8;

    void Awake() {

        rb = this.GetComponent<Rigidbody2D> ();

    }

    void FixedUpdate() {

        Vector3 moveDir = new Vector3 (Input.GetAxis ("Horizontal"), 0, 0);

        rb.MovePosition (rb.position + new Vector2 (this.transform.TransformDirection (moveDir).x, this.transform.TransformDirection (moveDir).y) * moveSpeed * Time.fixedDeltaTime);

    }

}

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

5

28.12.2016, 16:32

Wie groß sollte denn der von dir berechnete Wert für die wirkende Kraft eigentlich sein, damit es sich so verhält, wie du möchtest? Welche Masse hat dein Body? Und was bedeuten die "-20" da? 20 Newton? Das wäre dann etwa so viel Kraft wie 20 Tafeln Schokolade unter 1g wirken lassen würden.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

6

28.12.2016, 17:06

Du solltest auch eine Kreisförmige berechnung verwenden, wenn das Objekt sich im Kreis bewegen soll. Dafür brauchst du die Normale des Richtungsvektors zwischen Spieler und Planeten. Der Spieler selbst sollte sich dabei ebenfalls drehen. Ausserdem ist es nicht gut die Position eines Rigidbodys direkt zu manipulieren, weil das zu einem Tunneleffekt führt. Also lieber Kräfte verwenden

Edit: Nochmal drüber nachgedacht und ich bin mir gerade nicht sicher, ob du ersteres schon tust. Ich steck da gerade nicht so drin... xD

Edit 2: Das hat sich wohl seit dem letzten "Seite neu laden" erledigt. bitte Löschen.
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

7

29.12.2016, 13:19

-20 soll die kraft sein die den Spieler an den Planeten drückt.

Ich habe das Problem gelöst :D

C#-Quelltext

1
2
Vector2 moveDir = new Vector2 (Input.GetAxis ("Horizontal"), 0);
rb.position += new Vector2 (this.transform.TransformDirection (moveDir).x, this.transform.TransformDirection (moveDir).y) * moveSpeed * Time.fixedDeltaTime;



BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

8

29.12.2016, 15:47

-20 soll die kraft sein die den Spieler an den Planeten drückt.
Ja, das war schon klar... <_< Naechstes Mal genauer lesen...
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Werbeanzeige