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

Garzec

Alter Hase

  • »Garzec« ist der Autor dieses Themas

Beiträge: 693

Wohnort: Gießen

  • Private Nachricht senden

1

26.08.2017, 08:53

Rotierende Plattform in Unity erstellen

Hallo,
wenn ich eine Plattform (Würfel) um die y-Achse rotieren lassen möchte, nehme ich folgenden Code und packe einen Trigger oben auf den Plattformboden.

C#-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    [SerializeField]
    private float angleY;

    private void Update()
    {
        transform.Rotate(new Vector3(0, angleY * Time.deltaTime, 0));
    }

    private void OnTriggerEnter(Collider col)
    {
        col.transform.parent = transform;
    }

    private void OnTriggerExit(Collider col)
    {
        col.transform.parent = null;
    }


Das funktioniert einwandfrei. Ändere ich den Code aber so ab, dass die Plattform auch mal seitlich oder nach vorne kippen kann,

C#-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[SerializeField]
    Vector3 rotationVector;

    private void Update()
    {
        transform.Rotate(rotationVector * Time.deltaTime);
    }

    private void OnTriggerEnter(Collider col)
    {
        col.transform.parent = transform;
    }

    private void OnTriggerExit(Collider col)
    {
        col.transform.parent = null;
    }


dann passieren beim Draufspringen auf eine um X oder Z rotierende Plattform seltsame Dinge. Der Spieler wird extrem vergrößert, einmal wurde er endlos in die Luft geschleudert, etc. Diese Fehler kommen wohl zustande, da der Spieler zum Kind der Plattform wird. Beim Rotieren auf der y-Achse ja kein Problem.

Hat jemand eine Idee, wie man das Problem angehen könnte? Ich kann zwei Scripte schreiben, für eine rotierende Plattform auf der y-Achse und für eine rotierende Plattform um X oder Z. Aber möglicherweise kann man den Fehler ja auch anders beheben.

Psyco001

Frischling

Beiträge: 54

Wohnort: Berlin

  • Private Nachricht senden

2

26.08.2017, 09:41

Der Spieler wird nicht zum Kind der Plattform.
Das problem ist an dieser stelle eher das du das transform des Spielers (col) mit dem transform der box überschreibst und du möchtest eigtl. eher nur transform.position und vielleicht transform.rotation übernehmen, aber nicht transform.scale oder wie das dort Heist.

Garzec

Alter Hase

  • »Garzec« ist der Autor dieses Themas

Beiträge: 693

Wohnort: Gießen

  • Private Nachricht senden

3

26.08.2017, 11:03

also du würdest ein zweites script für die anderen beiden Plattformen (X und Z) anlegen und dort nur die Position und Rotation verändern?

Psyco001

Frischling

Beiträge: 54

Wohnort: Berlin

  • Private Nachricht senden

4

26.08.2017, 11:37

erstmal muss ich meine vorherige aussage revidieren, doch du machst mit col.transform.parent = transform; deine Plattform zum parent des Spielers(hab eben nochmal in die Doku geschaut, weil ich mir nicht mehr sicher wahr).
wenn du nun ein anderes Script hast welches die Skalierung des Charakters z.B. per getParent().transform irgendwie beeinflusst dann ändert es die Skalierung der Box was dazu führt das die Skalierung des Character relativ zur Box durchgeführt wird.
ansonsten: wenn du mit dem transform arbeitest und Veränderungen durchführst übernehme nur den kompletten transform wenn es tatsächlich so gewollt ist, denn du übernimmst dabei auch die Skalierung und die möchte man meistens nicht verändern.

Garzec

Alter Hase

  • »Garzec« ist der Autor dieses Themas

Beiträge: 693

Wohnort: Gießen

  • Private Nachricht senden

5

26.08.2017, 11:38

Ja okay, dann splitte ich das mit der Position und Rotatition.

Psyco001

Frischling

Beiträge: 54

Wohnort: Berlin

  • Private Nachricht senden

6

26.08.2017, 11:54

die frage ist: welches verhalten wolltest du denn haben? sollte sich der Player auch mit der Platform mitdrehen, also nicht nur um y sondern auch um x und z?

Garzec

Alter Hase

  • »Garzec« ist der Autor dieses Themas

Beiträge: 693

Wohnort: Gießen

  • Private Nachricht senden

7

26.08.2017, 12:06

Wenn die Plattform zb. seitlich kippt, muss er ja leicht mitkippen. Und bei ausreichendem Winkel eben runterrutschen bzw. fallen. Aber das erledigt ja die Schwerkraft von selbst.

Psyco001

Frischling

Beiträge: 54

Wohnort: Berlin

  • Private Nachricht senden

8

26.08.2017, 12:32

in diesem Fall solltest du zumindest für die Position folgendes verwenden:

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
private GameObject target=null;
 private Vector3 offset;

 void Start()
 {
     target = null;
 }

 void OnTriggerStay2D(Collider2D col)
 {
     target = col.gameObject;
     offset = target.transform.position - transform.position;
 }

 void OnTriggerExit2D(Collider2D col)
 {
     target = null;
 }

 void LateUpdate()
 {
     if (target != null)
     {
         target.transform.position = transform.position+offset;
     }
 }


und bei der Rotation solltest du nur die y Rotation verwenden.
das mit dem runter rutschen übernimmt ja die Physik für dich und das mit der leichten Rotation vor dem runter rutschen müsstest du auch entsprechend selber implementieren.

Garzec

Alter Hase

  • »Garzec« ist der Autor dieses Themas

Beiträge: 693

Wohnort: Gießen

  • Private Nachricht senden

9

26.08.2017, 15:35

Habe deinen Code mal in 3D ausgetauscht, bewege ich die Plattform wird der Spieler nicht mitbewegt, also da muss ich selbst nochmal nach schauen.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Garzec« (26.08.2017, 16:02)


Werbeanzeige