Jump to content
Unity Insider Forum
Thariel

[VR] UI vor dem Spieler statisch platzieren, aber vor allen Objekten überlagern

Recommended Posts

Hi

Ich hab das hier gepostet und nicht im VR Bereich, weil es nicht spezifisch um VR geht, aber bei mir trotzdem VR betrifft.

Ich möchte ein UI Interface in VR auf Tastendruck vor dem Spieler erscheinen lassen (ca 10m entfernt) und es soll immer sichtbar sein und nicht von Objekten verdeckt werden. Dazu habe ich eine zweite Kamera erstellt, welche nur das UI mit "Depth only" rendert. Es funktioniert gut, aaaber ich möchte nicht, dass es UI Interface sich mit der Kopfbewegung vom Spieler mit bewegt, sondern statisch stehen bleibt, damit der Spieler es betrachten kann.

Also wie ein Canvas im "World Space", aber es soll nicht von Objekten verdeckt werden. 

Versteht ihr? 🤨

Ich bekomme es nicht hin, dass es beide Kriterien erfüllt. Nur entweder so oder so.

Hat jemand eine Idee?

Share this post


Link to post
Share on other sites

Es kommt jetzt ein wenig darauf an, welche Rendermethode du nutzt.

Auf jeden Fall musst du deinem UI Canvas auf "World Space" im Rendermode einstellen. Jetzt ist die UI wie ein 3D Objekt im Raum. Du kannst sie wie jedes andere Objekt imRaum bewegen und auch ausrichten.

Jetzt brauchst du eine 2. Kamera, die in der Culling Mask nur die UI drin hat. Die 2te Kamera ist der MainCamera untergeordnet, damit sie sich mit dreht und sollte auch das gleiche FOV haben, wie die erste Kamera.

Wenn du das herkömmliche Rendermodell nutzt, dann müstest du eigentlich nur bei der Hauptkamera bei Cullingmask die UI raus nehmen und bei Depth die Kameras so einstellen, dass die UI Kamera eine höhere Depth hat, als die MainCamera.

Nutzt du die neuen Renderpipelines, dann ist das etwas anders. Hier musst du die UI Camera beim RenderType auf Overlay einstellen. Bei der MainCamera musst du in dem neuen Bereich "Stack" jetzt die UI Kamera einfügen.

Du hast also bei beiden Modellen eine neue Kamera drin, die immer in die selbe Richtung wie die Main Camera guckt. Die MainCamera rendert jetzt aber nichts mehr, was den Layer UI hat. Die neue Kamera rendert nur noch den UI Layer. Die neue Kamera liegt über der MainCamera, was du entweder über den Wert Depth einstellst, oder indem du ein Stack bei der MainCamera erstellst und dort die UI Camera einfügst. Je nach Rendermodell.


 

  • Like 1

Share this post


Link to post
Share on other sites

Das war auch so meine erste Idee, aber ich dachte mir, dass das in VR nicht vernünftig funktionieren würde - so von wegen binokularem Sehen? Hätte gedacht, man braucht da eher einen Shader für den Canvas.

Share this post


Link to post
Share on other sites

Das Canvas anzusehen, wenn es sich nicht mit der Kopfbewegung mit dreht, sondern z.B. vor dem Spieler erscheint und stehen bleibt, dann ist es es kein Problem wegen dem Komfort. Aber: Entweder ist das Canvas dann in der Spielwelt drin und wird überlappt oder es wird nicht überlappt so ich es gemacht habe, doch dann verschwindet alles vor dem Canvas, auch die Hände und einfach alles. Ist beides merkwürdig. Man müsste die Hände wieder auf ein anderen Layer legen um sie immer zu sehen und das Spiel zu Beispiel pausieren.

Vielleicht wäre es am einfachsten, ein "Inventarraum" zu erstellen, der sich irgendwo befindet und man sich mit Knopfdruck dort hin teleportiert. Der wäre dann ähnlich wie ein Kino designt und an der Leinwand ist das Canvas.

Man könnte das Canvas auch auf ein 3d Objekt heften, dass man mit der Hand herausnimmt, wie ein Rucksack.

Habe die Lösung noch nicht gefunden, aber auf jeden Fall muss man in VR das bisherige Vorgehen ganz neu interpretieren.

Share this post


Link to post
Share on other sites

Nur so eine Idee, hab das nicht ausprobiert... Sollte aber gehen:

  • Du machst eine Kamera und deinen Canvas.
  • Der Canvas steht auf Screen Space - Camera und rendert in deine Kamera, die ansonsten auch gerne alles über Layer ignoriert.
  • Die Kamera rendert in eine RenderTexture.
  • Du erstellst ein Quad und packst da ein neues Material drauf, das diese RenderTexture anzeigt.
  • Das Material braucht einen Shader mit ZTest Always und einer hohen Queue. Es wird dann zuletzt gerendert und ignoriert den Z-Buffer, wodurch es immer im Vordergrund ist.
  • Das Quad bewegt sich per Script mit dem Spieler mit, dreht sich aber nicht.

Share this post


Link to post
Share on other sites

Ich glaube das Ergebnis wäre dann wie in Lone Echo. Das ist eine gute Möglichkeit. Hier wird es gezeigt bei 38:38:

 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

×
×
  • Create New...