Kann man den angezeigten Kamerabereich eigentlich auch einschränken?

  • Hi zusammen.


    Ich möchte gerne etwas an meinem Design ändern. Und zwar möchte ich am unteren Bildschirmrand ein permanentes Widget haben. Aber nicht so, wie es sonst üblich ist, wie bei Shootern oder so, also HP, Ammo oder so, als Bild und Zahl über das Kamerabild eingefügt, sondern ich würde gerne mal ausprobieren, wie es aussieht, wenn unten ein Teil des Bildschirms als Anzeigebereich unten zur Verfügung steht, aber der restliche obere Bereich trotzdem das gesamte Bild anzeigt, also nichts hinter dem Widget verschwindet/überdeckt wird.

    Geht das irgendwie einzustellen? Bisher habe ich da noch nichts finden können.

  • DU meinst nicht 2 , Schwarze Balken like, sondern du meinst das das Bild wirklich in deinen Verhältnis gerendert wird? und unten immer ein Widget hast? , eigentlich das einfachste ist das Ganze Bild rendern,(Widgets werden ja auch gerendert und du willst ja volle Kontrolle) einfachste variante ist einfach das Bild voll rendern und drüberpacken tbh. (hast halt verschwendete Pixel) aber du willst ja auch sichter drauf klicken können usw.
    Deshalb einfach ein Normales Widget auf den Screen hauen sollte genau das sein.

  • Nein, ich meinte so, dass unten eine Leiste ist, mit verschiedenen Befehlen, die im Spiel benötigt werden und oben halt das Kamerabild, aber ohne Verlust und voll gerendert. Quasi ein Splitscreen, nur dass man nicht zwei Spieler hat, sondern unten Befehle und oben dann halt die Spieldarstellung.

    Ich wollte mal ausprobieren, ob dadurch mehr Informationen für den Spieler möglich sind. Ansonsten müsste ich den Dialog für die Bedienung immer gegebenenfalls ein- und ausblenden. Ich habe ein wenig Sorge, dass das für den Spieler vielleicht ein wenig hektisch wirken könnte.

    • Offizieller Beitrag

    Ich bin mir auch nicht sicher wie du dir das genau vorstellst. Ich glaube ich hab schon verstanden was du willst.


    Stichwort Splitscreen: Du willst [OBEN] einen Screen haben in dem sich dein Spiel abspielt und [UNTEN] einen Screen haben in dem sich das Menü befindet. Soweit korrekt ?


    Ich denke da gibt es jetzt mehre Möglichkeiten wie man das umsetzen kann.


    Ich kann dir nur ein paar Stichworte geben da ich sowas auch noch nie gemacht hab zur Info den Bereich den man als Spieler sieht, nennt man Frustum. Bei Splitscreen gibt also im grunde zwei Frustums.


    1. Ich bin mir nicht sicher ob du die mit der Scalebox im Widget den Canvas einfach skalieren kannst. Dadurch würde das Frustum einfach verkleinert werden. Das könntest du mal probieren. Schau dir hierzu auch mal das Canvas Panel an.

    UCanvasPanel
    The canvas panel is a designer friendly panel that allows widgets to be laid out at arbitrary locations, anchored and z-ordered with other children of the…
    docs.unrealengine.com


    2. Viewport aufteilung: Ja hört sich vermutlich genau nachdem an was du suchst aber bin mir nicht sicher ob das Technisch dann auch so ist. Du kannst die VIewport Size definieren: https://docs.unrealengine.com/…tAPI/HUD/GetViewportSize/

    So würde man es bei einem Splitscreen machen. Du musst aber auch auf die " screen Persentrage" achten, das die Auflösung die pro Splitscreen angezeigt wird. Sonst hast du eventuell Pixelmatsch.

    Get Viewport Size
    Get Viewport Size
    docs.unrealengine.com


    3.Schau dir mal die Kamera genauer an. Wenn ich mich nicht täusche gibt dort "View Frustum" was die Kamera Größe ist.

    Ich glaube aber dies würde man eher für Bild in Bild Geschichten verwenden.

  • ch kann dir nur ein paar Stichworte geben da ich sowas auch noch nie gemacht hab zur Info den Bereich den man als Spieler sieht, nennt man Frustum. Bei Splitscreen gibt also im grunde zwei Frustums.

    Ja OK, aber das Frustum ist halt der Bereich, den man pro Spieler sehen kann, sprich alles inkl. Bedienelementen. Da es sich aber nur um einen Singleplayer handelt, das mit dem Splitscreen war nur ein Beispiel um das Aussehen zu verdeutlichen, ist das Frustum etc. eigentlich nicht so wichtig.

    Ich versuche es noch mal anders zu beschreiben.

    Der Spieler soll bei mir nicht hauptsächlich mit weit entfernten Objekten interagieren könne, wie zum Beispiel bei einem Shooter, wo ja der Gegner entweder weit weg ist, oder auch einen großen Teil des Bildschirms ausfüllt. Man kann ihn als irgendwie immer treffen, mit einem Klick.

    Bei mir kann es auch Objekte geben, die weit unten am Bildschirmrand wählbar sind. Das heißt, wenn ich das HUD dauerhaft eingeblendet habe, könnte es bestimmte Objekte überdecken.

    Jetzt habe ich drei Möglichkeiten, das Ganze zu lösen.


    1. Ich gestalte die Level um, die das betrifft und sorge dafür, dass die Objekte, mit denen man interagieren kann, immer oberhalb des HUD liegen. Was ich da etwas befürchte ist, bei ungewöhnlichen Auflösungen, bzw. Seitenverhältnissen, ob das dann auch immer so bleibt. Ich habe als Privatmensch natürlich nicht endlos viele Monitore, um das auszuprobieren.

    2. Ich blende den unteren Teil ständig aus, fasse einzelne Interaktionsmöglichkeiten vielleicht auch direkt in dem Klick selbst zusammen, und blende den unteren Teil des HUDs regelmäßig nur bei Bedarf ein. Aber wie gesagt, ich habe da ein wenig die Sorge, dass das eventuell hektisch rüberkommt.


    3. Das, was ich halt hier frage. Dass man die Ausgabe der Kamera ein wenig einschränkt, also das Bild, wie es normalerweise auf dem ganzen Bildschirm dargestellt wird, nach oben schiebt, sodass unten ein Bereich frei wird für ein permanentes Menü.

    Momentan tendiere ich zu 2., vielleicht auch ein Mix aus 1. und 2. Aber ich wollte mich da nicht entscheiden, ohne wenigstens mal nachgefragt zu haben, ob vielleicht auch 3. möglich wäre.

    • Offizieller Beitrag

    Was spricht dagegen. Ich will ja nur die Kameraprojektion, sprich das was aus der 3D-Welt aufgenommen wird, einschränken.

    Ich glaube nicht das dies so möglich ist.


    Das Frustum ist ja keine Monitor Projektion oder ähnliches. Es gibt nur ein Frustum und in dass wird die UI geladen.

    Du kannst nicht zwei Frustums haben und das eine für 3D/2D dinge nutzen und das andere nur für 2D (der UI)


    Ich wüsste nicht wie das technisch gehen soll. Das wäre wie bei einer Webseite wo du oben ein Frame hast und unten Frame hast. Oben lädst du die Spielwelt rein und unten das UI geladen.

    So funktionieren aber schon die Widgets nicht weil die Lädst in deine Spielwelt und die kannst nicht in eine zweite Spielwelt laden.


    Du kannst höchstens das Widget und den Scale der Spielwelt verändern.

    Deine UI hat ja vermutlich eine Konstante Höhe und eine flexible breite. Für die brauchst du also immer die selbe höhe und der Rest der Bildschirmauflösung sollte für die Spielwelt verwendet werden.


    Was ich mir dachte;

    Es gibt ja viele Raumschiffspiele wie Starfield wo man Asteroiden abschießen muss und wo du dich in alle Richtungen um die eigene Achse drehen kannst. Dabei ist es möglich das die Asteroiden von allen Seiten ins Spielfeld hineinfliegen. (Links,Rechts, Oben und unten)

    Wenn sich die UI nun unten befindet, dann könnte die UI von unten hinfliegende Asteroiden verdecken.

    In diesem Szenario ist das nicht so wild weil die Asteroiden früher oder später ins Sichtfeld fliegen oder auch wieder verschwinden.

  • Bei mir fliegt aber nichts, bei mir ist vorhanden oder nicht.

    Rein theoretisch könnte ich die Kameraaufzeichnung natürlich auf ein Rendertarget packen und dann halt oben in die UI als Image packen, unten dann das Menü.

    Aber ich glaube, das könnte dann sehr starke Performanceeinbußen haben, auch wenn mein Spiel nicht auf schnelle Bewegungen ausgelegt ist.

    Aber, wie schon geschrieben, auch nicht allzu schlimm, ich habe ja noch die Möglichkeiten 1 und 2. Macht es zwar ein wenig komplizierter, weil es halt sehr ärgerlich wäre, wenn das mal hängen bleibt. Also schön sauber arbeiten.

    • Hilfreich

    Hi Tomarr .


    Es gibt eine UMG.Viewport-Klasse und es gibt hier dieses Plugin das einen Viewport in einem Widget anzeigt.

    Game Viewport Widget in Code Plugins - UE Marketplace
    Widget that encapsulates current viewport in UMG.
    marketplace-website-node-launcher-prod.ol.epicgames.com


    In der Godot-Engine gibt es tatsächlich ein Viewport-Panel in dem man einen Extra Viewport platzieren kannst und somit könnte man das gewünschte Ergebnis erzielen.


    Eventuell kann man das ja in der Unreal-Engine ähnlich nachbauen.


    Hier noch ein Tutorial für ein Custom Viewport. Geht auch in die Richtung.


    Externer Inhalt www.youtube.com
    Inhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.
    Durch die Aktivierung der externen Inhalte erklären Sie sich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.


    Gruss DarkFaces

  • Es gibt eine UMG.Viewport-Klasse und es gibt hier dieses Plugin das einen Viewport in einem Widget anzeigt.

    Werde ich mal ausprobieren. Ich nehme mal an, das geht über ein Rendertarget, also intern.


    In der Godot-Engine gibt es tatsächlich ein Viewport-Panel in dem man einen Extra Viewport platzieren kannst und somit könnte man das gewünschte Ergebnis erzielen.

    Dass es in anderen Engines geht, weiß ich. Es ist ja schon ein paar Jahre her, da hatte ich diverse andere Engines ausprobiert. Letztendlich bin ich dann aber bei der Unreal Engine hängengeblieben, wegen diverser Vorteile, und ich habe halt gehofft, dass es da auch eine Möglichkeit gäbe, also ohne über UMG, Rendertarget und andere Plugins zu gehen, wobei letzteres ja nicht so wild ist, wenn die Performance stimmt.

    Schauen wir mal, was am Ende dabei rauskommt. Danke erstmal.

  • OK, ich habe jetzt seit Stunden rumgedoktert.

    Fazit:


    1. Es funktioniert mehr schlecht als recht, zumindest nicht so wie ich es mir erhofft hatte.

    2. Das ist der wichtigste Punkt. Es sieht absolut besch****eiden aus. Egal wie man es dreht und wendet, es sieht aus wie ein RPG oder Point and Click Adventure aus den 80er - 90er Jahren. So Maniac Mansion oder so.

    Also ein Tipp von mir. Kommt nicht auf solche doofen Ideen.

    Oh, und nach einem Blick auf die Uhr ... ich glaube, wir haben schon 2024. Dann mal frohes Neues an alle.