Dynamic Material Instance in Blueprint (gleiches Item) abspeichern

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Dynamic Material Instance in Blueprint (gleiches Item) abspeichern

    Ahoi!

    Ich bin dabei ein Färbesystem für meine Rüstung einzubauen.

    Das sieht dann wie folgt auf dem Bild aus (übertriebene Farbe und Helligkeit, damit man es besser sehen kann). Das Rüstungsteil ist ein Static Mesh.



    Das ganze funktioniert so:
    Ich hebe den Gegenstand auf und halte diesen vor mir (so wie auf dem Bild oben), dann drücke ich die Taste Ä (testweise), um das Logo der Rüstung zu färben.
    Funktioniert auch im Multiplayer, andere Clienten sehen das und alles läuft perfekt.

    Wenn ich aber den Gegenstand aufheben will, um diesen in mein Inventar zu packen (und dort am Körper auszurüsten oder sonst etwas), wird die Färbung NICHT übernommen.
    Warum das so ist, keine Ahnung, vielleicht eignet sich ein Dynamic Material Instance nicht zum allgemeinen färben, brauche ich da etwas anderes?


    Das Script sieht wie folgt aus und ist sehr einfach und simpel gehalten (später möchte ich, dass man das Rüstungsteil in einen Farbtopf eintaucht, und sich dann das gewünschte färbt, entweder ganze Rüstung oder Logo).



    Das aufsammeln des Gegenstandes funktioniert einwandfrei, eben über den Server und dort werden einfach nur alle existierenden Funktionen und Werte 1:1 übernommen.


    Im Grunde soll jede Rüstung individuell gefärbt werden können und diese soll auch die Färbung beibehalten.

    Ich habe versucht die Färbeänderungswerte mit zu schicken (also beim Aufsammeln, Ausrüsten usw.), aber leider verursacht das mehr Fehler als es etwas bringt.
    Daher bleibt mir nur die Möglichkeit über, dass die Farbeigenschaft direkt in dem Gegenstand gespeichert wird.

    Grundsätzlich, sammele ich etwas auf, der alte Gegenstand wird zerstört.
    Rüste ich es aus, der alte Gegenstand wird zerstört.
    Vor jeder Zerstörung, werden alle Informationen an den "Nachfolger" (kein child) weitergegeben.


    Hoffe ihr versteht in etwa wie ich das meine und könnt mir dabei helfen :)
  • Wenn man es Global haben will dann kann man es ja in der Instanz hinterlegen, oder extern Abspeichern oder aber im Level Blueprint legen, je nachdem was man benötigt.
    Es im Char zu speichern macht auch Sinn wenn man etwas individuell pro Char halten will.

    Wo man es speichert ist daher davon abhängig wie man es verwenden will.
    hier kann man meine Modelle kaufen: http://www.cgtrader.com/harlyk
    DAS GRÖSSTE KOMMUNIKATIONSPROBLEM IST,DASS WIR NICHT ZUHÖREN, UM ZU VERSTEHEN. WIR HÖREN ZU, UM ZU ANTWORTEN.
  • Todesklinge schrieb:

    Spätestens wenn ein anderer Spieler den Gegenstand aufhebt, funktioniert das Charakter bezogene Merksystem nicht.

    Problem ist eben, wenn der Gegenstand erneut gespawnt wird, benutzt das System das Standard-Material.
    Du darfst nur nicht vergessen, dass wenn du das Item wieder aus deinem Inventar entfernst, die Variable wieder auf das Item zu übertragen, ich wüsste nicht wieso das nicht gehn sollte...
  • Eine Instanz oder das Level Blueprint sind auch ganz normale Blueprints.

    Legst dort Variablen an und vom anderen Ort wo du die Daten hast verwendest du "get gameinstance" und kannst so auf die Variablen der Instance zugreifen.
    Ähnlich funktioniert es mit allen Blueprintarten
    hier kann man meine Modelle kaufen: http://www.cgtrader.com/harlyk
    DAS GRÖSSTE KOMMUNIKATIONSPROBLEM IST,DASS WIR NICHT ZUHÖREN, UM ZU VERSTEHEN. WIR HÖREN ZU, UM ZU ANTWORTEN.
  • Harlyk schrieb:

    Eine Instanz oder das Level Blueprint sind auch ganz normale Blueprints.

    Legst dort Variablen an und vom anderen Ort wo du die Daten hast verwendest du "get gameinstance" und kannst so auf die Variablen der Instance zugreifen.
    Ähnlich funktioniert es mit allen Blueprintarten

    Und das geht auch problemlos im Multiplayer und was passiert eigentlich, wenn man von einer Karte auf die nächste geht (nächste Karte z.B.)?

    Direkt im RüstungBlueprint abspeichern geht gar nicht?
    Also dem BP, was auch gefärbt wird. Weil das irgendwie über das Level zu machen, hört sich irgendwie falsch an.

    Möchte auch gerne verstehen, warum das im Levelblueprint gemacht werden soll und nicht wo anders oder sonst wie?
  • Habe nicht gesagt das es im Levelblueprint gemacht werden soll.

    Habe gesagt das kommt drauf an welche Anforderungen du hast.

    Level Blueprint behält die Daten solange das Level aktiv ist, klingt logisch oder ?
    Game Instance behält die Daten global solange das Spiel läuft.
    Normal Blueprints können die Daten behalten , das muss aber nicht so sein. Das kommt drauf an wie du das programmierst.

    Beispiel zu den Normalen BPs.
    Spieler wird in LvL 1 geladen / gespawned. Rennt rum und findet tolle Ausrüstungen. Sagen wir mal als Beispiel diese werden im Player gespeichert in Variablen.
    Nun geht der Spieler in Level 2.

    Was passiert ?

    Der Spieler muss neu gespawned werden, also vom Spieler BP. dieses hat aber die Daten nicht "gespeichert" sondern hatte sie nur solange das BP aktiv war in der Instanz.
    Es wird also ein neuer Spieler gespawned und der ist halt leer.

    Wie löst man sowas also ?

    Man muss die Daten zwischenspeichen in eine Instanz die nicht neu erzeugt wird weil sie beim Levelwechsel zerstört wurde.
    Dafür gibt es die Gameinstance, diese bleibt bestehen solange das Spiel läuft.

    Also zwischenspeichern, Level wechseln und die Daten zurück schreiben...oder aber direkt in der Instanz ablegen.

    Ist das gleiche wie das Speichern des Spielstandes nur das wäre dann eine externe Datei da die Instanz ja beim beenden zerstört wird.
    hier kann man meine Modelle kaufen: http://www.cgtrader.com/harlyk
    DAS GRÖSSTE KOMMUNIKATIONSPROBLEM IST,DASS WIR NICHT ZUHÖREN, UM ZU VERSTEHEN. WIR HÖREN ZU, UM ZU ANTWORTEN.
  • Geht schon aber nur temporär.

    Denke das bleibt nicht bei einer Rüstung oder ?
    Erstell dir doch ein Datatable wo du die Werte deiner Rüstungen ablegst und super pflegen kannst.
    Im Construct des BPs kannst du dir dann immer die Daten aus den Datatable holen.

    So hast du die Daten in einer sauberen Tabelle, optimal um sowas zu erweitern und dein Rüstungs BP verwendet diese direkt
    hier kann man meine Modelle kaufen: http://www.cgtrader.com/harlyk
    DAS GRÖSSTE KOMMUNIKATIONSPROBLEM IST,DASS WIR NICHT ZUHÖREN, UM ZU VERSTEHEN. WIR HÖREN ZU, UM ZU ANTWORTEN.
  • Es sind 12 Rüstungsteile pro Charakter (Helm, Brust, Schultern usw.).

    Mein System läuft mit einem MasterItem (Blueprint) das eine Struktur hat.
    Also ohne Datatable oder anderes.

    Deswegen klappt das auch so gut und einfach mit dem Dynamic Material Instance und soll auch genau so fubktionieren. Nur leider kann ich das bisher nicht direkt im Blueprint abspeichern.

    Die Rüstung besteht aus 2 Objekten.
    1x StaticMesh
    1x SkeletalMesh

    Jeweils das andere ist unsichtbar. In der Welt wird das StaticMesh verwendet, am Charakter das SkeletalMesh.

    Färbe ich also die Rüstung, muss beides gefärbt werden (was ja einfach ist), nur nicht das abspeichern, spätestens dann wenn der alte Actor gelöscht wird.
  • Harlyk schrieb:

    Geht schon aber nur temporär.

    Denke das bleibt nicht bei einer Rüstung oder ?
    Erstell dir doch ein Datatable wo du die Werte deiner Rüstungen ablegst und super pflegen kannst.
    Im Construct des BPs kannst du dir dann immer die Daten aus den Datatable holen.

    So hast du die Daten in einer sauberen Tabelle, optimal um sowas zu erweitern und dein Rüstungs BP verwendet diese direkt
    Wie genau funktioniert das?

    Was genau macht denn ein Datatable?

    Vor allem, wie kann ich damit die Farbe der Rüstung dauerhaft im Blueprint speichern und das individuell (also nicht allgemein für alle Rüstungen), eben nur für die Rüstung die ich gefärbt habe?
  • DarkFaces schrieb:

    Ein Datatable ist read only, nützt dir als nix um individuelle Werte zu speichern.
    Wenn du deine Daten nicht online speichern willst bleibt dir eigentlich nur ein Savegame.
    Die Daten werden erst Online gespeichert, wenn auch entsprechend der Server dafür da ist.

    Aktuell möchte ich das ganze erst mal so Programmieren, dass man die ganzen Funktionen nutzen kann, um das dann später speichern zu können.
Unreal®, Unreal Engine, the circle-U logo and the Powered by Unreal Engine logo are trademarks or registered trademarks of Epic Games, Inc. in the United States and elsewhere.