Widget Component (in Blueprint Actor) nur für Client (xyz) angezeigen lassen

  • Guten Tag!


    Ich komme nicht auf die Lösung, wie ich ein "Widget Component" (welches in der World als 3d dargestellt wird, nur für den spezifischen Clienten anzeigen wird.

    Also wenn Client 1 in die CollisionSphere läuft, dann soll entsprechend auch NUR für Client 1 das Widget in der Welt angezeigt werden.

    Derzeit sieht es aber leider 1 und 2.


    Es geht hierbei um Multiplayer als Dedicated Server!



    Siehe Screenshots:


    Hier wird das Widget erstellt (entsprechend an BeginPlay) und auch wieder sofort unsichtbar gemacht (hidden).




    ---


    Hier wird dann das Widget sichtbar gemacht, wenn sich ein Actor mit dem Tag Spieler in die CollisionSphere läuft.

    Das funktioniert alles schon mal super, nur leider brauche ich das eben so, dass nur der entsprechende Spieler das sieht und nicht alle.


    PS: OnComponentEndOverlap ist natürlich vorhanden, wodurch das Widget wieder ausgeblendet (hidden) wird.





    Habe schon diverse "HasSwitchAuthority" und CustomEvents mit OwningClient versucht und nichts hat geholfen.



    Danke für eure Infos!

    Kann im Netz leider nichts darüber finden.

  • Ich glaub das Problem ist daß jeder das Widget hat. Du gibst JEDEM Spieler das Widget und machst es per script nur sichtbar/unsichtbar. Das hat den Charme daß es für alle gilt, aber das willst du ja gar nicht.


    Versuchs mal statt Widget allen reinzuknallen und unsichtbar zu machen lieber mal ganz ohne widget und dann bei dem Overlap machst du über "Create Widget" und "Add to Viewport". So hat dein Create widget auch nen owning player und du kannst individueller Steuern was du machst. beim end overlap dann remove from Viewport. Hint: Das Remove from viewport hat ne garbage collection, also keine Sorge - es wird automatisch zerstört.

  • Wegen dem Widget Component im Actor Blueprint war es so gedacht, dass man dort dann die Welt-Rotation Funktion hat.

    Also betrachtet man den Actor aus allen Richtungen, wandert das Widget auch immer korrekt zu dem Betrachtungswinkel.


    Daher wäre das so wie es jetzt ist schon perfekt, nur eben für den Client in dem Bereich und nicht für alle.


    Sinn und Zweck soll ja sein, das ich somit mehrere Rohstoffvorkommen im Umkreis auch besser optisch hervorheben kann, etwa wenn ich schon im Augenwinkel sehe das dort ein neues Widget aufploppt.


    Beim Create Widget ist das immer schwer mit dem 3D Effekt.

  • Ja stimmt es heisst korrekt "Remove from parent". Es braucht natürlich ne Referenz sofern das Remove from parent nicht im Widget aufgerufen wird. Anosnten kannst du auch schummeln und ein "Get all widgets of class" vor das "remove from parent" hängen.


    Wenn du das WIdget nicht zerstören und neu instanzieren willst dann geht auch deine Lösung mit "Set Visibility" -- sofern du beim create widget die referenz aufgenommen hast und hier verwendest.

  • Versuch einfach mal einen Custom Event zu erstellen. Diesen setzt du dann bei Replicaes auf "Run on owning Client"

    Das habe ich auch gemacht aber es funktioniert nicht.


    Alle meine Sachen im Spiel haben ein Widget Component was extrem gut funktioniert.

    Nur ist mir die ganze Zeit nie aufgefallen das die Teile für alle Spieler sichtbar sind... beim testen war das auch soweit ganz praktisch und hilfreich.


    Nun sollen die Widget Components nur noch entsprechend für den Spieler innerhalb einer gewissen Reichweite angezeigt werden und nicht für alle Clients.



    ---

    Mit und ohne SwitchHasAuthority usw. alles zig mal durch getestet.


    Habe es in diversen Möglichkeiten getestet und es geht nicht, beide Clients sehen das Widget obwohl nur Client 1 innerhalb des Radius ist.

  • Wo kommt denn die Referenz für deine Lebenspunkteanzeige her? Ich sehe da keine Variable in deinem Blueprint. Was mich auch wundert ist die Visibility "Scene component". Die Lebenspunkteanzeige sollte doch keine scene component sein?


    Create widget ist doch mit dem 3D view kein Problem, du kannst doch auch ein "Set position in viewport" auf das Widget werfen - in der Bewegung halt im Tick wenn es mitwandern soll.

  • Wo kommt denn die Referenz für deine Lebenspunkteanzeige her? Ich sehe da keine Variable in deinem Blueprint. Was mich auch wundert ist die Visibility "Scene component". Die Lebenspunkteanzeige sollte doch keine scene component sein?


    Create widget ist doch mit dem 3D view kein Problem, du kannst doch auch ein "Set position in viewport" auf das Widget werfen - in der Bewegung halt im Tick wenn es mitwandern soll.


    Die Reference für die Lebenspunkteanzeige ist doch links oben bei den Components (wo Cube, Baum usw ist).


    Set Visibility Secene Component kommt daher weil die Lebenspunkteanzeige ein Widget Component ist.

  • Wie kann man dann ein Widget über "CreateWidget" als 3D Widget in der Welt anzeigen lassen?

    Es gibt nur Vector 2D Variablen dafür.


    Darum finde ich auch Widget Component besser, weil das in der Welt bleibt, aber es müsste halt irgendwie nur noch für den spezifischen Client angezeigt werden und nicht für alle.


    Weil egal wie ich das drehe und wende, mit dem Create Widget ist die Reichweite sehr eingeschränkt.


    Als Beispiel:


    Landeanflug mit dem Flugzeug auf einen Flughafen (Landebahn) und alle 50 Meter zu beiden Seiten neben der Landebahn ist ein Widget in der Welt platziert was anzeigt (absteigend) wie viel Meter noch bis zur Ende der Flugbahn übrig sind.


    Wie soll man so etwas als "normales" Widget machen? Dann würde ja das ganze Viewport überlaufen mit solchen Sachen.



    So wäre es dann mit dem Wald wo die Bäume solch ein Widgets haben, bei zu vielen Bäumen würde man ja nichts mehr sehen.

  • Hi, ich hab ein gutes Video Tutorial gefunden wo der Typ macht was ich meine. Ist vielleicht einfacher Verständlich. Ist zwar ne Haelth Bar statt Punkteanzeigeaber vom Prinzip her ja das gleiche...



    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.

  • Oh weiha, von den Filtern sehe ich zum ersten mal... ^^


    Es müsste mal eine Liste von den wichtigsten "Dingern" (allgemein) geben.

    So vieles ist in der Unreal Engine versteckt.



    Kannst du noch bitte eine kurze deutsche Erklärung dazu geben, für was genau welcher Filter geeignet ist?





    So wie es aussieht ist "IsPlayerControlled" das richtige für mich :)

    Vielen Dank!

  • Hi, ich hab ein gutes Video Tutorial gefunden wo der Typ macht was ich meine. Ist vielleicht einfacher Verständlich. Ist zwar ne Haelth Bar statt Punkteanzeigeaber vom Prinzip her ja das gleiche...



    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.

    Genau so habe ich es bisher auch gemacht, mit entsprechend mehr Informationen zu den Monstern, zu welcher Fraktion die gehören, Lebenspunkte, Ausdauer und vieles mehr.


    Aber das alles sehen eben leider ALLE Spieler im Spiel und nicht der Spieler der vor dem Monster steht und dagegen kämpft (grob ausgedrückt).

  • Hier präsentiere ich die Lösung die bisher perfekt funktioniert und das beste, ich kann das Widget Component im Blueprint (in allen) behalten und sinnvoll verwenden.


    Das Create Widget führt immer zu diversen Problemen (es funktioniert zwar aber man kann es nicht so schön in der Welt glaubwürdig platzieren).


    Im Grunde ist das WidgetComponent im Blueprint und wird dort auch auf unsichtbar gestellt.

    Bei OnComponentBeginOverlap (entsprechend der Spieler wird gefilter) wird dann auch nur für diesen einen Spieler das Widget in der Welt in 3D angezeigt.


    Ich behaupte mal das dies für viele weitere Bereiche extrem wichtig sein wird.

    Dadurch kann man direkt in der Spielwelt für bestimmte Spieler ein 3D Widget erzeugen (etwa für eine Markierung in der Spielwelt usw.).


    Sollte jemand Fehler sehen, bitte bescheid geben :)



    Bei OnComponentEndOverlap einfach das gleiche wieder hier, nur entsprechend dann unsichtbar machen.

  • PS: Wie kann man ein "CapsuleTraceByChannel" (oder anderes) dazu verwenden, das man das WidgetComponent von einem Gegner oder Gegenstand aus der Ferne anzeigen lassen kann?


    Sozusagen ich blicke durch ein Fernrohr auf einen Gegner und dann soll entsprechend das WidgetComponent aktiviert werden, so wie als wenn ich direkt vor dem Gegner stehe (also durch "OnComponentBeginOverlap")?


    Danke für die Infos :)