Licht Spawn und Löschen

    • Offizieller Beitrag

    Ich brauche etwas Inspiration und eine intelligente und performanten Lösung.


    Ich befinde mit der Thirdperson perspektive. Wenn ich die Maus bewege, sollen in in kurzen Abständen pointlights erstellt werden.


    Im Prinzip so nur mit Pointlights und Thirdperson.


    Die Pointlights sollen entweder ab einer bestimmten Menge an pointlights oder nach einer bestimmten Zeit wieder gekillt werden. Das will ich noch ausprobieren.


    Mir fehlt aber die Idee wie ich das Sinnvoll umsetzen kann.


    Mein Ansatz ist:

    Die haue die Lichter in ein Array rein, muss dann irgend wie Zeit messen wie lange sie schon existieren und Lösche sie dann wieder wenn zb wenn 2 Sekunden vorbei sind.


    Jemand ne Idee ?

    Irgend wie klingt das vorhaben voll einfach aber ich steh irgend wie auf dem Schlauch ^^


    Mir ist klar wie ich viele Pointslight generieren und speichern kann und deren Zeit messen und sie in Reihenfolge wieder löschen kann.

  • Ich probiere am das am Wochenende aus.

    Kein Problem, ist ja nicht mehr so lange hin. :P

    Aber es müsste eigentlich probieren, da ich ja den Screenshot machen musste, habe ich es dann auch gleich ausprobiert und bei mir funktioniert es einwandfrei.

    Die Variable Time machst du am besten noch "Instance Editable" und "Expose on Spawn" dann kannst du eben halt auch zur Laufzeit noch gut an der Zeit drehen.

    Der Vorteil zum Timer by Event ist übrigens, du kannst es gleich am Anfang setzen und danach, falls da noch etwas kommt, anderen Code des Actors schreiben, also so wie bei mir gleich nach Begin Play. Dann stimmt auch die Zeit bis zum Despawn. Wenn er vielleicht noch anderen Code vorher abarbeiten würde, dann wäre das mit der Zeit eher so ein Glücksspiel, je nachdem wie lange der andere Code benötigt und dann erst der Timer gestartet wird.

    Aber da kannst ja selber nochmal schauen, was du da hin und her basteln willst, von der Grundlage her sollte es so aber funktionieren.

    • Offizieller Beitrag

    Hmm, ich habe das ausprobiert und würde das gerne anders lösen.

    Man bewegt die Maus beispielsweise in einer Linie. Dann sollten mehrere Lichter gesetzt werden.

    Nachdem das erste Licht gesetzt wurde, soll dieses kurz heller aufleuchten. Die Intensität sollte erhöht werden, ähnlich wie bei einer Glühbirne, die plötzlich mehr Strom erhält.

    Sobald die maximale Helligkeit erreicht ist, soll das Licht sehr schnell abdunkeln und bis auf 0 heruntergedimmt werden, ähnlich wie ein Stern, der erlischt. Erst dann sollte das Licht gelöscht werden.


    Bei Avatar, haut der Avatar doch auf Pflanzen dann heller werden und dann direkt wieder dunkel werden. So hab ich mir den Effekt vorgestellt. Es sollten aber auch nicht zuviele Lichter gespawnt werden so dass die Performance stabil bleibt.


    Wenn ich das über einen Timer löse, kann nicht einzelne Lichter ansteuern und sie auch nicht manipulieren.


    Das ist im grunde der Effekt den ich haben will:



    Bewegt man die Maus, gibt ganz viele dieser Lichtpunkte.

  • Aber, das kannst du doch mit dem Event alles machen. Du musst ja nur den entsprechenden Code einfügen. Die Lichtkurve würde ich dann vielleicht als Timeline erstellen, und wenn die Timeline abgelaufen ist, dann löscht sich das Licht halt. Moment, dauert etwas, bis ich den Screenshot gebaut habe.

  • So, fangen wir mal mit den Grundlagen an. Hierfür musst du dein Licht im Actor erstmal auf Intensity 0 stellen, weil die Intensity übernimmt ja jetzt die Timeline.

    Dann baust du dir halt eine Timeline, so wie im Screenshot, kannst die Kurve ja jederzeit ändern. Allerdings, die Timeline ist Float, die Länge ist 1 Sekunde, weil, dann kannst du über eine Variable die Zeit steuern. Wenn du die Länge jetzt auf 2 Sekunden setzt und im BP sagst du dann, das soll zwei Sekunden dauern, dann dauert es in Wirklichkeit 4 Sekunden. Das Warum siehst du dann aber im nachfolgenden Code. Value sollte auch nicht mehr als 1 überschreiten, weil auch da kannst du die Intensity dann per Variable steuern.



    Wie gesagt. Form und Anfangsvalue, das kannst du ja nach deinen Bedürfnissen anpassen.


    Externer Inhalt blueprintue.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.


    Du brauchst zwei Variablen, Time, habe ich standardmäßg auf 2 gestellt. Light Multiplikaor auf 5000. 5000 ist die Standardintensity von einem Pointlight, wenn du es erstellst. Beide sind Float und beide auf Instance Editable und Expose on Spawn stellen.

    Set Play Rate stellt die Abspielgeschwindigkeit der Timeline ein. Deswegen wird auch 1 durch die Zeit geteilt, die du haben möchtest, wenn du dann auf zwei Sekunden stellst, dann wird die Timeline halt in halber Geschwindigkeit abgespielt. Deswegen sollte die Timeline auch genau 1 Sekunde lang sein, denn, wenn du 2 Sekunden mit halber Geschwindigkeit abspielst werden daraus 4 Sekunden.

    Deine eingestellt Light Intensity in der Variable (5000) wird dann mit dem Output der Timeline multipliziert, deswegen sollte in der Timeline, dass Value auch 1 nicht überschreiten, weil dann kriegst du am Ende halt den genauen Wert, welchen du haben willst.

    Hier kannst du Destroy Actor am Finished-Execute verwenden, ohne extra Event, weil das wird ausgelöst, sobald die Timeline beendet ist.

    Ich denke, der Rest ist auf dem Screenshot erkennbar. Aber kannst natürlich auch nachfragen.


    P.S. das habe ich vielleicht noch vergessen. Das Light Intensity, welches in Play Rate reingeht, ist die Timeline-Componente selbst. Point Light ist die PointLight-Componente des Actors.