Singular Geschrieben 21. Oktober 2020 Melden Share Geschrieben 21. Oktober 2020 Zur Abwechslung mal wieder ein etwas anderes Thema, was mir gerade Probleme macht. Ich scheine die Physics.IgnoreCollision noch nichts ganz begriffen zu haben. Ich nutze sie an mehreren stellen ab sie wird einfach ignoriert... obwohl er doch etwas anderes Ignorieren soll... Mein Projektil hat einen Collider als Trigger. public class ProjectileMovement : MonoBehaviour { public float projectileSpeed = 2f; private Transform tr; public int damage; public GameObject hit; public GameObject erzeuger; void Start() { Physics.IgnoreCollision(erzeuger.GetComponent<Collider>(), GetComponent<Collider>()); tr = GetComponent<Transform>(); Destroy(gameObject, 5); } void Update() { tr.position += tr.up * projectileSpeed * Time.deltaTime; } void OnTriggerEnter(Collider collision) { Collider c = collision; if (c.gameObject == erzeuger) { Physics.IgnoreCollision(c, GetComponent<Collider>()); } else if (c.gameObject.GetComponent<ProjectileMovement>() == true) { Physics.IgnoreCollision(c, GetComponent<Collider>()); } else { try { c.gameObject.GetComponent<Health>().TakeDamage(damage); } catch { } } OnHit(); Destroy(gameObject); } void OnHit() { GameObject h = Instantiate(hit, tr.position, tr.rotation); Destroy(h, 0.5f); } } Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 22. Oktober 2020 Melden Share Geschrieben 22. Oktober 2020 Ich vermute aufgrund der Art der Nutzung der Methode in OnTriggerEnter, dass du die Funktionsweise etwas missverstanden hast, obwohl du die Methode in Start richtig nutzt. Wenn du diese Methode aufrufst (und nicht false übergibst), dann wird von diesem Moment an die Kollision zwischen den beiden übergebenen Collidern ignoriert. Du hast also z.B. eine Wand und einen Ball, der darauf zu rollt. Wenn du IgnoreCollision aufrufst und Ball und Wand übergibst, bevor sich die beiden berühren, dann wird der Ball hindurchrollen. Und das auch beliebig oft, sollte der Ball zurückrollen. Und zwar so lange, bis du IgnoreCollision noch einmal mit den beiden Collidern und false aufrufst. In Start machst du also alles richtig. Start wird ausgeführt, bevor die Physik-Engine das erste Mal mit dem Objekt arbeitet. Jegliche Kollision zwischen Projektil und Erzeuger wird deshalb für immer ignoriert. In OnTriggerEnter ist die Kollision allerdings schon in vollem Gange. Da gibt's dann nichts mehr zu ignorieren, das müsste vorher passieren. Du könntest hier einfach das machen, was du schon tust - mit GetComponent schauen, ob eine Reaktion stattfinden soll oder eben nicht - oder mit Layern arbeiten. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Singular Geschrieben 23. Oktober 2020 Autor Melden Share Geschrieben 23. Oktober 2020 Okay... ich habe den Fehler gefunden. Passiert wahrscheinlich auch nur, wenn man Objecte aus dem Asset Store nutzt. Mein Spieler hatte mehrere Collider. Ich habe ihm selber einen Mesh Collider gegeben aber in einem der Childs waren auch nochmal mehrere Collider. Als ich die gelöscht habe hat es so geklappt wie es sein soll... zumindest als ich es in die Start Methode geschrieben habe^^ Danke für die Hilfe! P.S.: Bitte den Inspektor hier Ignorieren ich bekomme ihn nicht aus dem Beitrag gelöscht. Habe den Beitrag von meiner Frage zurück zu der Nachricht oben geändert. 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.