Jump to content
Unity Insider Forum

Physics.CheckBox will nicht


thewhiteshadow

Recommended Posts

Ich versuche für ein Objekt, was ich erzeugen will mit Physics.CheckBox vorher zu prüfen ob es plaziert werden kann.

Leider schlägt die Funktion nie an.

Der Ausschnitt sieht etwa so aus:

BoxCollider collider = prefab.GetComponent<BoxCollider>();

location = ...
rotation = ...
// Das lasse ich mir mit Graphics.DrawMesh anzeigen und stimmt auch, da das Objekt an genau dieser Position landet.
// meinLayer ist Konstant und richtig. Das habe ich mehrfach überprüft.
// collider.size ist beim prefab gesetzt. bounds würde an der Stelle nicht funktionieren.

// Ich weiß, dass CheckBox die halbe Größe haben will, also /2
if (!Physics.CheckBox(location, collider.size/2, rotation, meinLayer, QueryTriggerInteraction.Collide)) {
  // frei (hier geht er immer rein)
}
else {
  // hier geht er nie rein
}

Meine Rahmenbedinngungen:

Ich führe die Aktion in der Start-Methode aus.

Alle Objekte haben das "Trigger"-Flag im Collider und kein Rigedbody.

Im Anhang sieht man deutlich die Überlappung der Teile. Das vorhandene Teil (Links) das neu plazierte Teil (Rechts) mit der Debug-Wireframe-Box über Graphics.DrawMesh gezeichnet. (Der Collider stimmt damit überein). Dennoch schlägt CheckBox  nicht an.

 

P.S. Bitte nicht auf die unsinnige Ausrichtung der Kollisions-Box im vergleich zur Plazierung achten. Ich weiß, dass ich hier noch Feintuning betreiben muss.

Unbenannt.JPG

Weiß jemand vielleicht was ich falsch mache, oder wo ich nochmal ansetzen kann?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Update: Wenn ich vor dem Test ein Empty-GameObjekt erstelle, und einen Rigedbody sowie einen Collider gebe, dieses dann an die Position des vorhandenen Objekt setze erkennt der Test dieses und auch nur dieses Objekt. Habe mal mit OverlapBox alle Collider ausgegeben. Er erkennt nur mein dynamisches Empty-GameObjekt .

Das kommt mir nicht normal vor.

Außerdem hab dem vorhandenen Objekt ein Rigedbody verpasst hat aber nix genützt.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Die parameter ergeben die im Anhang gezeige Box (Links). Und die überlappt den rechten Collider. Auf Y-Achse überlappen die sich natürlich auch (Der screenshot ist von oben).

 

Das mit der Start-Methode hab ich auch schon überlegt, aber es steht nichts davon in der Doku und von der Funktionsweise sollte das egal sein.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ok ich hab eine Lösung.

Irgendwie mag Checkbox die Angabe eines Layers nicht. Wenn ich ~0 verwende geht es. Obwohl der Layer definitiv richtig ist und ich überhaupt kein Objekt mit anderem Layer habe.

Das ist zwar nervig, weil ich jetzt mit OverlapBox arbeiten muss und den Layer im Nachgang überprüfen muss, aber immerhin gehts.

Ich würe nur zugern wissen, warum das so ist. Möglicherweise ein Bug?

Ok ist weiß es nun. LayerMask.NameToLayer gibt keine Maske zurück, sondern nur den Layer. :(

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.

×
×
  • Neu erstellen...