Reggie() Geschrieben 23. Januar 2019 Melden Share Geschrieben 23. Januar 2019 Für eine Darstellung eines Würfelwurfes (W6) habe ich mich gegen eine Animation entschieden. Also habe ich einen Würfel aus 6 flachen cubes zusammengesetzt. Diese einem leeren GameObject (Würfel) untergeordnet. Dem GameObject habe ich noch einen rigedbody mit Schwerkraft verpasst. Soweit klappt auch alles, der Würfel rollt physisch. Nun will ich natürlich fürs Würfelergebnis wissen, welche Fläche oben ist. Zuerst dachte ich, ich packe einen weiteren cube ins Innere des Würfels und ermittle über die Transform.rotation welche Fläche oben sein müsste. Wenn es klappt wäre es noch einfacher, wenn ich einfach abfrage, welche Fläche den höchsten Wert location.y hat. Gibt es noch eine einfachere Möglichkeit? Reggie() Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Reggie() Geschrieben 23. Januar 2019 Autor Melden Share Geschrieben 23. Januar 2019 So stell ich mir das vor. die 6 Seiten sind in einem array side[6] int maxy = 0; int seiteObenID; for (int i=0; i < 6; i++) { int sidey = (int)side[i].transform.position.y; if (maxy < sidey) { maxy = sidey; seiteObenID = i; } } das müsste gehen, oder? gibt es eigentlich eine array-Funktion, die den höchsten Wert ausgibt? Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 23. Januar 2019 Melden Share Geschrieben 23. Januar 2019 vor 49 Minuten schrieb Reggie(): gibt es eigentlich eine array-Funktion, die den höchsten Wert ausgibt? Jap: meinArray[meinArray.Length - 1] Wobei du bei For-Schleifen genau aus dem Grund "<" benutzt und nicht "<=": for (var i = 0; i < meinArray.Length; i++) vor 49 Minuten schrieb Reggie(): das müsste gehen, oder? Joa, aber ich würd's ehrlich gesagt so machen: [SerializeField] private Vector3[] sides; public int GetNumber() { int result = 0; var closestAngle = Mathf.Infinity; var relativeUp = transform.InverseTransformDirection(Vector3.up); for (var i = 0; i < sides.Length; i++) { var angle = Vector3.angle(relativeUp, sides[i]); if (angle < closestAngle) { closestAngle = angle; result = i; } } return result + 1; } Die Eigenschaft "Sides" befüllst du im Inspektor so, dass der Vektor durch die jeweilige Seite geht, wobei [0] der eins auf dem Würfel entspricht, [1] der zwei usw. Bei Fragen gerne fragen. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Reggie() Geschrieben 24. Januar 2019 Autor Melden Share Geschrieben 24. Januar 2019 vor 17 Stunden schrieb Sascha: meinArray[meinArray.Length - 1] vorher noch Array.sort(meinArray); oder? EDIT: Problem ist nur, dass die Reihenfolge meines Array nicht verändert werden soll. Ohne sort kann man nur über Prüfungsschleifen den höchsten Wert ermitteln? Zum Glück ist mein Array nur 6 lang Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
devandart Geschrieben 24. Januar 2019 Melden Share Geschrieben 24. Januar 2019 Um den größten Wert in einem int Array zu finden, kannst Du auch LINQ nutzen. Beispiel: //über deiner klasse LINQ einbinden using System.Linq; //irgendwo in deiner Funktion var arr = new int[] { 1, 2, 3, 4, 5, 6 }; //beispiel array var max = arr.Max(x => x); //max wert Wenn Deine 6 Flächen einzelne Objekte sind, kannst Du auch folgendes machen. Achtung, das ist nur Pseudocode, ungetestet. public Transform[] meineFlaechen; //da tust du deine flächen im inspector rein Transform ObereFlaeche { get { return meineFlaechen.Max(t => t.position.y); //die lambda variable t steht für das aktuelle Transform und vergleicht die Y Position aller Elemente. vom höchsten Y Wert wird dann das Transform zurückgegeben. } } Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 24. Januar 2019 Melden Share Geschrieben 24. Januar 2019 vor 3 Stunden schrieb Reggie(): vorher noch Array.sort(meinArray); oder? Nö. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Reggie() Geschrieben 24. Januar 2019 Autor Melden Share Geschrieben 24. Januar 2019 meinArray[meinArray.Length - 1] gibt doch nur das letzte Element und nicht das Element mit dem höchsten Wert ?! Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 24. Januar 2019 Melden Share Geschrieben 24. Januar 2019 Ach, so meinst du das. Hatte das anders verstanden, weil du oben auch die 6 hardcoded hattest. Wenn's darum geht... was @devandart schrieb. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Recommended Posts
Archiviert
Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.