Interaktions-Icon wenn man auf den Actor schaut

  • Tag zusammen,

    Ich komme bei meinem aktuellen Vorhaben nicht weiter!

    Folgendes ist gewünscht:
    Ich habe div. Objekte mit denen ich Interagieren möchte. Dazu möchte ich eine visuelle Anzeige haben, was mir ein "Point of Interest" anzeigt. Also ein Objekt womit ich interagieren kann wenn ich mich in der Nähe befinde. Wenn ich nah genug dran bin um mit einem Objekt interagieren zu können UND auch das Objekt anschaue (von der Kamera aus, nicht vom Charakter selbst), dann soll das Symbol zu dem entsprechenden Button wechseln.

    Aktuell IST-Zustand:
    Das Symbol was durch ein Billboard Image angezeigt wird ploppt auf sobald ich mich in der Nähe des Objektes befinde. Da wird einfach eine Triggerbox ausgelöst die beim Verlassen das Symbol wieder entfernt.
    Dann habe ich einen 2-Trigger der für die Abfrage zum Interagieren da ist. Wenn ich in die Box komme dann wechselt das Symbol zum entsprechenden Button.
    Die Interaktion läuft über ein LineTrace, so das ich den Trigger auch anschauen muss wie gewünscht und die Interaktion funktioniert auch.

    Aktuelles Problem / gewünschter SOLL-Zustand:

    Aktuell wechselt das Symbol nur wenn ich in dem 2. Trigger stehe oder hinausgehe. Dies soll aber auch oder nur dann passieren wenn ich den Trigger mit meinem LineTrace treffe. Sprich mein LineTrace bestimmt dann ob ich nah genug dran bin oder nicht. Dann soll auch das entsprechende Symbol angezeigt werden.
    Da komme ich aber nach vielen herum probieren nicht ganz drauf wie ich das machen kann. Das LineTrace triggert ja nur beim hiten des Triggers. Aber ich bekomme keine Abfrage hin wann das LineTrace den Trigger nicht mehr trifft. Also das Symbol soll sich dementsprechend ändern wenn ich den Trigger anschaue oder nicht.


    Hier der Aufbau des Actors mit den Triggern, das LineTrace triggern nur den zweiten Trigger, der erste ist nur dazu da um anzuzeigen ob ich den Nähe bin.



    Hier werden ganz normal die Symbole gesetzt wenn der Character den entsprechenden Trigger erreicht.



    So ist mein LineTrace aufgebaut:




    Diese Abfrage brauche ich quasi. Das Interface triggert ja nur beim Hiten der Triggerbox somit wird "Looking at" auf "true" gesetzt.
    Aber beim wegschauen findet mein LineTrace ja nichts und somit findet auch keine Abfrage statt. Also bleibt es auf "true". Da fehlt mir die Logik.



    Hier nochmal paar Bilder wie es in der Paxis aussieht:
    Wenn ich mich in der Nähe des Objektes befinde.



    Wenn ich im Interaktions Radius befinde.



    Und dann wenn ich aber wegschauen. Da bleibt das noch.


    Hier sollte das Symbol verschwinden, weil ich damit nicht mehr interagieren kann.

  • Ich kenne mich leider sehr wenig aus, aber kannst du das Event (Looking at) und die Abfrage danach in das Blueprint deines Linetrace einbauen, quasi, dass wenn: Does implement interface getroffen wird, du die Anzeige auf true stellst, aber ansonsten auf false belässt?

    Vielleicht keine große Hilfe, aber vielleicht ein Denkanstoß


    Alles Gute und auf jeden Fall viel Glück und Erfolg

  • Die Screenshots sind leider sehr klein, deswegen konnte ich jetzt nicht alles erkennen.

    Solltest du eigentlich vergrößern können oder?


    Aber ist, das nur so wenn du nur die Kamera drehst, davon gehe ich jetzt mal aus wegen dem letzten Bild, oder auch wenn du den Charakter wegdrehst?

    Das LineTrace hängt an der Camera dran. Also da wo ich hinschaue schaut auch das LineTrace hin.
    Heißt es soll ganz egal sein wie der Charakter steht.
    Aktuell ist es auch so wenn der Charakter wegschaut aber noch im Trigger steht, dann kommt das gewünschte Icon. Wenn ich mit der Camera hinschaue dann kann ich interagieren. Da das Icon aber noch davon abhängig ist ob der Char drin steht oder nicht, kommt das Icon natürlich auch wenn ich mit dem LineTrace wegschaue. Macht aber so kein Sinn. Weil dem Spieler wird vermittelt "drücke X zum interagieren" geht aber nicht weil das LineTrace ja nicht hinschaut.

    Deswegen will ich es nicht vom Char abhängig machen sondern vom LineTrace.

  • Du hast leider meine Frage nicht richtig verstanden, oder ich habs nicht gut genug erklärt. Ist auch eine Menge Text.

    Das anschauen und interagieren funktioniert ja.
    Mein Problem ist aber das Symbol zum Interagieren. Wenn ich im Trigger stehe kommt das Symbol zum interagieren. So ist es momentan. Ich möchte aber dass es kommt wenn ich es anschaue. Würde auch gehen. Was mir fehlt ist, dass ich das Symbol nicht weg bekomme wenn ich wegschaue. Da ich beim wegschauen keinen Trigger vom LineTrace bekomme. Nur beim hinschauen, weil es über ein Interface läuft. Wenn ich nicht auf das Interface hinschaue kann auch keine Abfrage stattfinden.

  • So wie ich dich halt verstanden habe, soll der Charakter im Trigger stehen und du sollst drauf schauen. Sprich beide Bedingungen sollen erfüllt sein, um eben halt das Interaktionssymbol auszulösen und auch die Interaktion zu ermöglichen. Wenn du nun beide Bedingungen erfüllst passiert das auch, aber es verschwindet halt nicht mehr, wenn eine der beiden Bedingungen, also Linetrace, nicht mehr erfüllt ist. Oder habe ich das jetzt komplett durcheinandergebracht?

  • Habe mir jetzt nicht alles angeschaut, aber wenn dein LineTrace ein Interaktives Objekt trifft speicherst du es in einer Variablen und prüfst dann ob du immer noch auf dieses Objekt schaust. Wenn nicht wird das Symbol wieder ausgeblendet.

    Das war auch immer mein erster Gedanke nur wollte ich es immer über ein Blueprint Interface machen und es klappte aber nicht, oder ich wusste nicht wie.
    Ich meine ich habe die Variable beim wegschauen nicht mehr leer bekommen.

    Ich baue es mir mal nachher von neu auf und schaue nochmal nach. Irgendwann ist auch einfach der Kopf voll und man kann halt nicht mehr denken.


    So wie ich dich halt verstanden habe, soll der Charakter im Trigger stehen und du sollst drauf schauen. Sprich beide Bedingungen sollen erfüllt sein, um eben halt das Interaktionssymbol auszulösen und auch die Interaktion zu ermöglichen. Wenn du nun beide Bedingungen erfüllst passiert das auch, aber es verschwindet halt nicht mehr, wenn eine der beiden Bedingungen, also Linetrace, nicht mehr erfüllt ist. Oder habe ich das jetzt komplett durcheinandergebracht?

    Jaein. Das wenn der Charakter in dem Trigger steht ist NOCH aktuell so nur um zu testen ob das Symbol kommt. Die Abfrage soll später nur über das anschauen stattfinden. Also egal ob der Char drin steht oder nicht. Weil das Linetrace gibt im Endeffekt die richtige Entfernung schon vor.

  • Also du willst die Triggerbox weglassen und nur über Linetrace daran gehen?


    Kann es sein, dass du bei einem Linetrace-Hit dann eine boolsche Variable auf true setzt, diese aber nicht mehr auf false zurückgesetzt wird? So einen Fehler hatte ich mal eingebaut.


    Also ich hatte das damals so gemacht, um einzublenden, welche Aktionen möglich sind, zum Beispiel wenn man vor einer Tür oder einem Schalter steht. Ich hatte es allerdings nur über die Triggerbox gelöst. Immer wenn ich reingelaufen bin hatte ich dann eine Variable auf true gesetzt, um die Interaktionen freizugeben, hatte aber vergessen sie wieder auf false zu setzen.


    Der Effekt war ähnlich, die Anwendung ist ähnlich. Bei mir fällt nur der Linetracer weg.

  • Ich hatte es so:


    Hatte den gleichen Effekt.
    Habe es aber nun mal so wie bei dir umgebaut.


    Allerdings bekomme ich es nicht hin ohne einen "Tick Event" zu benutzen, den Wert zu übermitteln beim "wegschauen".

    Das wird im Character abgefragt:


    Das LineTrace:



    Das passiert dann am Actor auf den ich schaue:



    Hat wer noch Tipps oder Ideen wie ich es ohne einen Tick hinbekomme?
    Mit BP Interface geht es nicht. Weil ab den Moment wenn man wegschaut triggert das Interface nicht mehr und setzt somit die Variable nicht mehr leer. Ich habs zumindest nicht hinbekommen.

    Mit Cast to geht es auch nicht weil dann spuckt der mir ständig Fehlermeldungen aus, weil ich ja was versuche zu bei Cast Fail zu machen wo ich aber die Ref vom Cast brauche. (hoffentlich habt ihr den Satz verstanden) :D

    Aktuell werden BEIDE Ticks beim betreten der Box aktiviert und beim rausgehen wieder deaktiviert.

    Aber muss doch auch ohne gehen oder???

  • Du hast das jetzt so übernommen, prüfst aber gar nicht mehr ob es das richtige Objekt ist.


    Das mit dem Interface sollte auch gehen. Beim ersten mal draufschauen sendest du eine Message und bevor du das Objekt aus der Variablen entfernst sendest du wieder eine.



    Die Funktion SendMessage halt mit dem Interface-Event ersetzen.

    Ich hoffe es geht so, ist schon spät.

  • Vielen lieben dank für deine bisherige Hifle, echt Top :thumbup:

    So habe ich wieder genau das selbe Problem.
    Und zwar in dem Moment wenn ich weg schaue. Dann hat das SendMessage kein Target mehr. Und somit wird dann auch die Variable nicht mehr übermittelt oder auf leer gesetzt. Beim Interface braucht man ja aber doch ein Target?

    Also mein LineTrace schaut das Objekt an, erst ist es NotValid, dann setzt er die Variable und es ist Valid. Dann in dem Moment wenn ich weg schaue, seh ich zwar beim Debug wie er bei der Branch auf False geht und somit die Variable wieder leer setzten soll, er es aber nicht macht. Wenn ich beim Event Interface ein Print ran hänge dann haut er mir ab den hinschauen die Variable raus und beim wegschauen immer noch.


    Also die Variable selbst ist wohl zwar leer, aber dass weiß das Interface nicht. Dort ist die Variable immer noch als gesetzt zwischen gespeichert.