Interaktions-Icon wenn man auf den Actor schaut

  • Ich hab mir gerade mal alles durchgelesen. Wenn ich das richtig sehe, dann führen selbstverständlich viele Wege zum Ziel.


    Allerdings denke ich, dass hier ein grundsätzliches Missverständnis zwischen Realität und anzuwendenter Logik vorliegt. Du willst das Programmieren, wie du dir den kausalen Zusammenhang im echten Leben vorstellst. Die Idee ist, dass dir auf dem Bildschirm beispielsweise am unteren Rand angzeigt wird, dass du mit "E" interagieren kannst. So entheme ich das deiner Erklärung als auch deinem Screenshot mit dem roten Kasten und dem "x" am unteren Bildrand.


    Aus meiner Sicht benötigst du keine Variable und einen Tag. Das LineTrace gibt immer ein Ergebnis/Tick, also ist die erste Prüfung immer nur: "isValid".


    Die zweite Prüfung ist, dass ein Tag: "Interaktion" beim Aktor vorhanden ist.


    Der Actor vom LineTrace wird für diesen Zweck nicht abgespeichert. Dein Hinweis am unteren Bildschrimrand wird also nur dann eingeblendet, wenn der Tag "Interaktion" vorhanden ist ("hasTag"), was eine typische if/else Kondition ist.


    Im Blueprint ist das der Flip/Flop mit der Verbindung des "AND", da der LineTrace am EventTick arbeitet, ändert er die Sichtbarkeit deines Buttons am unteren Bildschirmrand mit jedem Tick.


    Die Interaktion selbst, gehört nicht in diesen Logikaufbau hinein, da die Logik über die Sichtbarkeit des Interaktionshinweises in sich abgeschlossen ist und auch nicht von weiteren Bedingungen abhängt.


    Dein Blueprint wird als kleiner und performanter.


    Hinweis: Da es sich insbesondere durch das LineTrace und den EventTick um eine LowLevelProgrammierung handelt, rate ich dir an, diesen Teil in C++ zu schreiben und in ein Macro umzuwandeln. Falls du etwas Weiterbildung in dem Bereich haben möchtest, empfehle ich dir Alex Forsythe auf YT und dort insbesondere das Video zu BP/C++.

  • Aus meiner Sicht benötigst du keine Variable und einen Tag. Das LineTrace gibt immer ein Ergebnis/Tick, also ist die erste Prüfung immer nur: "isValid".


    Die zweite Prüfung ist, dass ein Tag: "Interaktion" beim Aktor vorhanden ist.


    Der Actor vom LineTrace wird für diesen Zweck nicht abgespeichert. Dein Hinweis am unteren Bildschrimrand wird also nur dann eingeblendet, wenn der Tag "Interaktion" vorhanden ist ("hasTag"), was eine typische if/else Kondition ist.


    Im Blueprint ist das der Flip/Flop mit der Verbindung des "AND", da der LineTrace am EventTick arbeitet, ändert er die Sichtbarkeit deines Buttons am unteren Bildschirmrand mit jedem Tick.


    Die Interaktion selbst, gehört nicht in diesen Logikaufbau hinein, da die Logik über die Sichtbarkeit des Interaktionshinweises in sich abgeschlossen ist und auch nicht von weiteren Bedingungen abhängt.

    Wie wäre es mit einem simplen Beispiel?

    Ich versteh da nur Bahnhof.

  • Wie schon gesagt gibts da viele Möglichkeiten. Letztlich ist ja auch egal was hinten drann ist und sichtbar gemacht wird. So eine Lösung würd ich selber auch nicht verwenden. Die frist für das zu lösende Problem zuviel Performance, vor allem mit BP. Alles was am EventTick hängt, muss immer wohl überlegt werden.


    Mir würde auch eher eine Dinstanzkontrolle vorschweben, die eben nur dann zum Tragen kommt, wenn der Spieler x<= Distance hat und der ForwardVector zum Object zeigt. Das sollte auch mathematisch wendig Aufwand sein und nur dann berechnet werden, wenn der Spieler in der Triggerbox des Objects steht.

  • Mir würde auch eher eine Dinstanzkontrolle vorschweben, die eben nur dann zum Tragen kommt, wenn der Spieler x<= Distance hat und der ForwardVector zum Object zeigt. Das sollte auch mathematisch wendig Aufwand sein und nur dann berechnet werden, wenn der Spieler in der Triggerbox des Objects steht.

    Das halte ich für eine vernünftige Älternative.


    Ich selbst bevorzuge auch eine Triggerbox als Sichtfeld. Die generiert Ein und Austritts-Events und ich habe die Kontrolle über alle Objekte in der Umgebung. Ergänzt wird das ganze durch ein Fokus-System das auch die gezielte Interaktion mit kleinen Gegenständen ermöglicht.

  • Anfangs hat ich auch nur einen Trigger, nur um die Funktion zu testen. Dann wollte ich halt dass wenn sich die Kamera weg dreht, sprich wenn im extrem Fall das Objekt aus dem Bild verschwindet, dann auch nicht mehr interagieren kann.
    Ist halt sonst komisch wenn man sich umschaut, auf einmal auf E kommt und irgendwas passiert nur weil man in einem Trigger stand.
    Daher dann die Lösung über den LineTrace. Ich kann es aber auch nochmal mit der Berechnung vom ForwardVector probieren.


    Wegen dem Tick mach ich mir keine Sorgen, das wird auch im Interaktionsradius Ein- und Ausgeschaltet und ist bisher nur für die Icon Anzeige da.

    Ich habe dafür erstmal ein Billboard Image benutzt, daher das Set Sprite.
    Habe es nun aber auch auf ein Widget geändert, da man damit noch bessere Sachen machen kann wie zB das AUS- und EIN-faden vom Icon. Was ich jetzt gemacht habe.

    Wirkt viel smoother und angenehmer als wenn es sofort starr aufpoppt.