Jump to content
Unity Insider Forum

Game Objekt geht durch Wände trotz Collider


Roehrensockel

Recommended Posts

Hoffe als Anfänger auf Hilfe.

Umgebung:

Universal Windows Platform/ Mixed Reality / MRTK2.4

Ich erstelle für ein Game eine Raumstation in der Künstliche Schwerkraft herscht, um die Zentrale zu verlassen muss ich ein Schott greifen und mitnehmen für eine spätere Anwendung, nutzen tue ich Motion Controller mit Inteactiven Händen. Das klappt auch alles super, ich kann das Schott greifen und an der Wand abstellen oder auf den Boden legen und auch mitnehmen, es gibt nur ein Problem solange ich das Schott halte geht es durch Wände und Boden trotz Box Colider, lasse ich es los flipt es aus der Wand raus.

Das Game Objekt Door hat eine Box Colider und einen Rigidbody mit abgehakter Gravity, um zu greifen sind aus dem MRTK2.4 die C# scripte "NearInteractionGrabbable.cs" und "ManipulationHandler.cs" angefügt, beim ManipulationHandler wird das Host Transform "Door" selbst als Game Objekt gesetzt, OneHand Manipulation, die Rotation ist auf die X Achse beschränkt, ich habe dort schon alle Varianten getestet ohne Erfolg, siehe auch die angehängten Grafiken.

Mit dem Problem bin ich wohl auch nicht allein, in VR Spielen wie TalosPrinciple, Obduction oder Paper Beast kann ich gehandlte Objekte fröhlich duch Wände stecken, an z.B. Laser Sperren kolidieren sie aber.

Ich hoffe es hat Jemand eine Idee was ich für einen Fehler mache.

Tür_eingesetzt.jpg

Tür_angelehnt.jpg

Inspector1.jpg

Inspector2.jpg

Link zu diesem Kommentar
Auf anderen Seiten teilen

Es ist nicht direkt ein Fehler, den du machst, aber so etwas muss leider obendrauf implementiert werden. Das Problem ist halt, dass für deine Hände die Regeln der virtuellen Physik nicht gelten und deshalb Sonderregeln gefunden und eingebaut werden müssen. Ist genau wie beim Kopf: Den kannst du munter in Wände stecken, also werden Sonderregeln wie das Schwarzfärben des Bildes implementiert, damit man nicht auf die andere Seite schauen kann.

Bei Hand-Interaktion scheint der verwendete Code einfach Dinge an deine Hand zu positionieren und fertig. Bei kleineren und unbeschränkten Objekten geht das vermutlich ganz gut. Ich glaube, was ich versuchen würde (ohne jetzt zu viele Best Practices zu VR im Kopf zu haben), ist: Du hast ein unsichtbares Objekt, das der Spieler greifen kann. Es befindet sich an der Interaktionsstelle der Tür (also dem Türgriff). Der Spieler zieht es und die Tür versucht, sich so auszurichten, dass sie in Richtung des unsichtbaren Objekts zeigt. Dabei ist es okay, wenn man das Objekt etwas weiter weg zieht, als die Tür physikalisch zulassen würde. Zieht man allerdings über einen gewissen Schwellenwert hinweg, dann "bricht" die Verbindung und die Tür fängt an, das Objekt zu ignorieren. Lässt man das Objekt los, teleportiert es sich zu seiner Ausgangsposition am Türgriff zurück. Ist die Verbindung gebrochen, wird sie dann wieder hergestellt, falls man erneut greifen möchte.

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 22 Stunden schrieb Sascha:

Es ist nicht direkt ein Fehler, den du machst, aber so etwas muss leider obendrauf implementiert werden. Das Problem ist halt, dass für deine Hände die Regeln der virtuellen Physik nicht gelten und deshalb Sonderregeln gefunden und eingebaut werden müssen. Ist genau wie beim Kopf: Den kannst du munter in Wände stecken, also werden Sonderregeln wie das Schwarzfärben des Bildes implementiert, damit man nicht auf die andere Seite schauen kann.

Bei Hand-Interaktion scheint der verwendete Code einfach Dinge an deine Hand zu positionieren und fertig. Bei kleineren und unbeschränkten Objekten geht das vermutlich ganz gut. Ich glaube, was ich versuchen würde (ohne jetzt zu viele Best Practices zu VR im Kopf zu haben), ist: Du hast ein unsichtbares Objekt, das der Spieler greifen kann. Es befindet sich an der Interaktionsstelle der Tür (also dem Türgriff). Der Spieler zieht es und die Tür versucht, sich so auszurichten, dass sie in Richtung des unsichtbaren Objekts zeigt. Dabei ist es okay, wenn man das Objekt etwas weiter weg zieht, als die Tür physikalisch zulassen würde. Zieht man allerdings über einen gewissen Schwellenwert hinweg, dann "bricht" die Verbindung und die Tür fängt an, das Objekt zu ignorieren. Lässt man das Objekt los, teleportiert es sich zu seiner Ausgangsposition am Türgriff zurück. Ist die Verbindung gebrochen, wird sie dann wieder hergestellt, falls man erneut greifen möchte.

Danke für die Informationen, ich hatte angenommen das irgendwo was fehlt. Ich werde wohl da ich eine Menge unterschiedliche bewegte Objekte habe in den Räumen und Gängen Trigger Collider setzen die etwas kleiner als die Räume selbst sind und eine "OnTriggerStay" Methode und die Position abfragen, verläßt ein Objekt den Trigger Colider setze ich es auf die letzte Position zurück oder lasse es schlicht fallen, mal schauen ob ich ein funktionierendes C# Script hinbekomme.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Man könnte das Objekt sobald es sich in einen anderen Collider hineinbewegt auch leicht zurücksetzen (in die Gegenrichtung der Bewegung der Hand oder des Players) und dann das Objekt dem Spieler aus der Hand fallen lassen. Sollte sich der Gegenstand nach dem Zurücksetzen immer noch im anderen Collider befinden würde ich es auf die Initialposition zurücksetzen. Allerdings kann dieses Zurücksetzen oder das aus der Hand fallen lassen den Spieler auch nerven.
Dieses leidige Problem des Clippens eines Gegenstandes in ein anderes Objekt hatte ich auch schon ohne VR bei einem einfachen Schwertkampf mit Schild. Hier clippte das Schild immer in den Gegner (wenn der Spieler zu nah an den Gegner lief) und ich musste daraufhin die Position des Spieler korrigieren damit das Schild wieder "frei" wird.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Das habe ich gerade versucht mit einem Trigger Collider der im Raum steht aber etwas kleiner ist und eine "OnTriggerStay" Methode abgefragt wird, da fallen dann auch Null Gravity gesetzte Objekte zu Boden, selbst die auf Weltkoordinaten Null gesetzte Gravity, oder im Rigidbody wird ignoriert da spielen aber alle Objekte verrückt und rotieren innerhalb der nicht fixierten Achsen wie wild? Ein anderer Versuch mit einer Abfrage der vorhandenen Collider mit "OnCollisionEnter" bewirkt gar nichts und wird ignoriert, ich habe einen Sound gesetzt bei Kollision, lasse ich das Schott auf die Wand zugleiten bekomme ich bei Trigger meinen Sound, führe ich das Schott mit der Hand passiert nischt. Ich gehe davon aus dass das MRTK Script irgendwie die Collider ausser Kraft setzt und werde mir das Script wohl mal genauer ansehen müssen allerdings sind diese Scripts für mich als Anfänger nicht leicht verständlich, das Script bietet aber die Möglichkeit Events auszuwerten evt. kann ich da was setzen.

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

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

×
×
  • Neu erstellen...