Keisi Geschrieben 16. September 2020 Melden Share Geschrieben 16. September 2020 Hallo liebe Leserinnen und Leser, ich versuche mich an meinem ersten eigenem Spiel. Es soll relativ simpel werden, Grundidee: Es handelt sich um einen Platformer. Der Spieler steuert einen Würfel. Dieser Würfel kann zwischen den Farben schwarz und weiß per linker Maustaste wechseln (Diese Funktion habe ich noch hinbekommen). Nun kommt allerdings mein Problem: Ich möchte, dass der Spieler die Farbe des Würfels der Plattform anpassen muss um darauf landen zu können. Sollte er beispielsweise versuchen mit dem weißen Würfel auf einer schwarzen Plattform zu landen, soll er schlicht und einfach durch die Plattform fallen. Ich sitze nun schon seit mehrern Tagen daran, diesen Zusammenhang zwischen Farbe und BoxCollider herzustellen und es mag einfach nicht funktionieren. Ich wäre für eure Hilfe sehr dankbar! ;D Im Anhang findet ihr das Script zum Farbwechsel. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 17. September 2020 Melden Share Geschrieben 17. September 2020 Moinsen! Benutze für Code bitte gerne den Code-Tag (<> neben dem Unity-Symbol über dem Textfeld), dann kann man besser über den Code reden als mit Screenshots "Nicht mehr mit Dingen kollidieren" kann man auf mehrere Arten machen: Mit Physics.IgnoreCollision die Kollision zwischen zwei Objekten ausschalten. Das ist hier weniger sinnvoll, da es um ganze Gruppen von Objekten geht und das ein bisschen oft ausgeführt werden müsste. Mit der Layer Collision Matrix arbeiten. Auf dem Bild der Anleitung sieht man ganz gut, wie die funktioniert: Du packst ein oder mehrere Objekte in Layer A, dann noch ein oder mehrere in Layer B und schaltest die Kollision zwischen Layern A und B aus. Das ist hier keine schlechte Variante. Du kannst dann einfach deinen Spieler zwischen den Layern "schwarz" und "weiß" wechseln lassen (gameObject.layer = layerBlack, und layerBlack stellst du über eine LayerMask im Inspektor ein). Etwas krasseres. Jedes GameObject kann nur genau einen Layer haben, wodurch du dir mit Variante 2 die Möglichkeit verbaust, Layer für etwas anderes zu benutzen. Außerdem gibt es nur 32 mögliche Layer. 2 funktioniert also, hat aber potentielle Nachteile. Wenn du diese auf dich zukommen sehen kannst, dann müsste man sich etwas anderes überlegen. Möglich wäre zum Beispiel, dass auf allen Plattformen ein Script ist (klingt krasser, als es ist, wäre nicht unüblich), das sich selbst in eine von mehreren Listen einträgt (eine Liste pro Plattformfarbe). Dann kann dein Player zu diesen Listen gehen und sagen "Alle Plattformen in Liste 'Schwarz' schalten ihren Collider aus". Dadurch würde dann auch die Kollision mit allen anderen Objekten flöten gehen. Wenn das nicht akzeptabel ist, könnte man diese Lösung mit Variante 1 kombinieren und schauen, wie das mit der Performance aussieht. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Keisi Geschrieben 17. September 2020 Autor Melden Share Geschrieben 17. September 2020 vor 14 Stunden schrieb Sascha: Benutze für Code bitte gerne den Code-Tag (<> neben dem Unity-Symbol über dem Textfeld), dann kann man besser über den Code reden als mit Screenshots Alles klar, werde ich mir merken! ;D Ich habe es mit den Layers schon probiert, allerdings gab es da immer ein Problem. Wenn mein Spieler mit dem weißem Würfel auf ein weißes Feld springt klappes alles, dann wechselt er die Farben und somit auch die Layers, dann klappt auch alles. Wenn mein Spieler jetzt aber wieder auf den weißen Würfel wechselt ist die Layer nicht mehr aktiv durch Physics2D.IgnoreLayer... und ich bräuchte quasi ein Code, welcher dieses Physics2D.Ignore... wieder annuliert quasi. Gibt es sowas? xD Wenn ich etwas flasch erkläre / verstanden habe entschuldige ich mich im vorraus dafür! 😜 LG Keisi using System.Collections; using System.Collections.Generic; using UnityEngine; public class ColorSwap : MonoBehaviour { public Material[] materials; public Renderer myRenderer; private int index = 1; // dadurch muss man nur einmal auf die Maus drücken, um zu wechseln private void Start() { myRenderer = GetComponent<Renderer>(); // lässt mich auf den Renderer zugreifen myRenderer.enabled = true; // macht das gerenderte 3D Objekt sichbar, wenn aktiviert } void Update() { if (materials.Length == 0) // wenn kein Material ausgewählt ist, passiert nichts { return; } if (Input.GetMouseButtonDown(0)) { index += 1; // wenn der Klick erfolgt, geht es auf die nächste Stufe if (index == materials.Length + 1) { index = 1; } myRenderer.sharedMaterial = materials [index - 1]; } } } Nochmal den Code ;D Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 17. September 2020 Melden Share Geschrieben 17. September 2020 vor 13 Minuten schrieb Keisi: und ich bräuchte quasi ein Code, welcher dieses Physics2D.Ignore... wieder annuliert quasi. Die Methode hat einen bool-Parameter. Ist er true, wird ignoriert, rufst du mit denselben Collidern noch einmal, aber mit false, auf, dann wird wieder kollidiert. Ich würd's aber, wenn nichts (wie beschrieben) explizit dagegenspricht, mit der Layer Collision Matrix-Variante probieren. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Keisi Geschrieben 18. September 2020 Autor Melden Share Geschrieben 18. September 2020 Okay danke! Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Raidenkk Geschrieben 18. September 2020 Melden Share Geschrieben 18. September 2020 Cool da lern ich gleichzeitig mit hat mir bei einem Problem geholfen ^^ Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Zer0Cool Geschrieben 18. September 2020 Melden Share Geschrieben 18. September 2020 Eine andere Methode wäre noch immer zu prüfen, ob die Farbe des Würfels der Farbe der Plattform entspricht auf dem der Würfel landen möchte. Dies könnte man über einen Raycast in Flugrichtung des Würfels (der Velocity seines RB) oder der Steuerrichtung des Spielers herausbekommen. Wenn die Farbe des Würfels nicht passt, dann wird der Collider des Würfels einfach deaktiviert. Das klappt aber nur, wenn der Würfel nur auf einer Plattform landen kann, sobald 2 Plattformen aneinander grenzen können oder der Raycast nicht exakt entscheiden kann wo der Würfel landen wird, dann wird es denke ich mit dieser Methode schwierig. Du musst halt schauen was sich am besten eignet. Jede Methode hat seine Vor- und Nachteile. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Raidenkk Geschrieben 19. September 2020 Melden Share Geschrieben 19. September 2020 Ansonsten gibt es glaub noch OnTriggerEnter und du machst den Collider vom Trigger ein wenig weiter nach unten so das er Zeit hat die Plattform zu prüfen. Dann gibt es noch OnCollisionEnter ich glaube das ich gleich zu behandeln wie mit dem OnTriggerEnter. Dabei aber nicht den Collider für die eigentliche Kollision nutzen sondern einen zweiten. Finde aber das meine weg nicht gerade Professionell sind, so hätte ich es aber gemacht 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.