Plugin API - Wehre schön, wenn & Fehlerberichte - It would be nice, if & bug reports

  • Auch wenn keine Areas vorhanden sind sollte diese Funktion eigentlich niemals null zurückgeben.

    Ja, vieleicht ist schon Repariert:D


    Alerdings wenn ich Versuche:

    Java
    Area[] gaa = Server.getAllAreas();
    System.out.println("AreaLength["+gaa.length+"] ");
    for (int i=0;i<gaa.length;i++){
    System.out.println("Area["+i+"] = "+gaa[i]);
    if (gaa[i]!=null) {
    System.out.println("Area["+gaa[i].getName()+"] ");
    }
    }

    Bekomme ich:

    Ich hatte das Vorher, nicht so genau beschriebenX(



    Unity bietet direkt einen Asset Bundle Browser als Package für den Editor

    Das ist gut, kann man mal ein Liste erstellen:thumbup:
    8|interface.bin mit 144Mb dauern bei mir schon über 50min.:lol:hätte ich nicht gedacht

    Mit dem nächsten Update kommt ja die getAllAssetNames() Funktion für Asset Bundles rein.

    :wow:Das wird Rocken:D
    Könnte man neben einem TexturAsset auch ein TextAsset Laden? So das im Bundel zu einem Prefab noch ein Vorschaubild und Beschreibung platzieren kann^^


    Du meinst das Radial-Menü? Wahrscheinlich wäre da eine player.hideRadialMenu() Methode sinnvoll

    Ja, Perfeckt^^


    Also zumindest dass das Callback dann trotzdem aufgerufen wird

    Das reicht volkommen aus:thumbup:


    Das ist zumindest dann "normal", wenn keine Npcs deaktiviert wurden.

    Oke, also direckt habe ich keine Abgeschaltet, ich hatte ja nur noch welche von dem Test mit spawnnpc <name> variante Übrig , bei den es mehrere Varianten gibt, aber das Maximun +1 dan wohl die diable ausgelöst hat.
    Aber warscheinlich wird für die DisableNpc noch eine DB gemacht in der die nicht reingekommen sind, denke ich:D
    Spawnen über die API und da zu deaktievieren habe ich noch nicht Getestet




    Eine kleinigkeit habe ich noch:D

    Kann ich hier HudLayer/hudContainer/leftContainer/buildingStatusContainer/transformStatusContainer/statusLabel rein Schreiben?
    Im Style ist das ja nicht für den Text möglich, aber am Liebsten würde ich schon dein Baumenü nurzen
    Mit player.addUIElement(UIElement, UITarget.HUD); komme ich ja auch nicht direckt bis zum HudLayer/hudContainer/leftContainer/buildingStatusContainer/transformStatusContainer/ um dort eventuell nur einen eigenes UILabel zu Platzieren
    :saint:Kannst du da was anbieten, oder ist die gefar dann zu groß, das dass Spiel Instabiel wird

  • Die Icons für das Baumenü liegen überwiegend in "interface/icons/building"

    Ich habe das mal getestet:

    Java
    radialMenuIcons = new TextureAsset[]{TextureAsset.loadFromGame("interface/icons/building/move1.png"),
        //TextureAsset.loadFromGame("interface/icons/building/size1.png"),
        TextureAsset.loadFromPlugin(plugin, "/resources/assets/GameObjectSelect.png"),
    TextureAsset.loadFromGame("interface/icons/building/rotate1.png")};

    was habe ich im Phat Vergessen?
    Ich bekomme für die GameAssets keine "CH:" warscheinlich CheckSumme

    Code
    REGISTER ASSET TEXTURE (149) FROM GAMEASSET: interface/icons/building/move1.png (EXT: asset, CH: )
    REGISTER ASSET TEXTURE (150) FROM FILE: /resources/assets/GameObjectSelect.png (EXT: png, CH: 89638fc951b50c45a9f42159729f82e9)
    [Java] Load from resources (plugin 1): -2126260726_d1fa7521bca978a236737360eee51382_89638fc951b50c45a9f42159729f82e9 89638fc951b50c45a9f42159729f82e9
    REGISTER ASSET TEXTURE (151) FROM GAMEASSET: interface/icons/building/rotate1.png (EXT: asset, CH: )
  • Alerdings wenn ich Versuche:

    Achso, die einzelnen Areas sind null, nicht das Array an sich? :wat: Das kann ich bestätigen... das werden wir mit dem nächsten Update fixen ;)


    8| interface.bin mit 144Mb dauern bei mir schon über 50min. :lol: hätte ich nicht gedacht

    Was dauert so lange? Das Asset Bundle in Unity zu öffnen? 8|


    Könnte man neben einem TexturAsset auch ein TextAsset Laden? So das im Bundel zu einem Prefab noch ein Vorschaubild und Beschreibung platzieren kann ^^

    Was soll das TextAsset denn können? Oder soll das einfach nur ein Weg sein, einen String aus einem AssetBundle zu erhalten?


    Oke, also direckt habe ich keine Abgeschaltet

    Ja, wenn keine Npcs ausgeschaltet wurden (beim Erstellen der Welt), dann ist es gewollt, dass die Funktion null zurückgibt ;)


    Kann ich hier HudLayer/hudContainer/leftContainer/buildingStatusContainer/transformStatusContainer/statusLabel rein Schreiben?
    Im Style ist das ja nicht für den Text möglich, aber am Liebsten würde ich schon dein Baumenü nurzen
    Mit player.addUIElement(UIElement, UITarget.HUD); komme ich ja auch nicht direckt bis zum HudLayer/hudContainer/leftContainer/buildingStatusContainer/transformStatusContainer/ um dort eventuell nur einen eigenes UILabel zu Platzieren
    :saint: Kannst du da was anbieten, oder ist die gefar dann zu groß, das dass Spiel Instabiel wird

    Direkt bestehende Texte des Spiels ändern kannst du leider nicht, aber du kannst eigene Elemente einem beliebigen Ziel hinzufügen mit Internals.addUIElementToPlayer() :)


    was habe ich im Phat Vergessen?

    Sorry, das hätte ich etwas genauer konkretisieren müssen: Wenn Assets aus dem Spiel geladen werden, erwartet das Spiel, dass der Anfangsbuchstabe großgeschrieben ist (also Interface statt interface). Beim restlichen Pfad ist das egal, es geht wirklich nur um den ersten Buchstaben.


    Wir werden das mit dem nächsten Update ändern, sodass Klein-/Großschreibung dabei keine Rolle mehr spielt, aber wenn du aus dem kleinen i ein großes I machst sollte es jetzt schon klappen ;)

  • red51

    Es soll ein Weg sein Texte / Text-Dateien aus dem AssetBundle zu lesen

    um z.B. Beschreibungen für Assets zu haben

    oder lange Dialog-Texte.

    oder wenn ich ein AssetBundle für die Allgemeinheit ausliefere dann sollen alle Beschreibungen schon drin sein.


    Siehe: UnityEngine.TextAsset


    Wenn ich eine *.txt Datei mit Unity lese dann bekomme ich auch ein TextAsset.

    Es wird alles gut :) früher oder später :D meistens später :nerd: ... ich wandle Kaffee in Quelltext um.

    Und besucht die Rising World Wiki

  • Was dauert so lange? Das Asset Bundle in Unity zu öffnen?

    Ja, der AssetBundles-Browser von Unity macht das nicht! Ich habe nach 3h dann mal abgebrochen. Glücklicherweite gab es in der Komunity ein Alternative, die ist allerdings nicht für Große Dateien ausgelegt(1GB+ geht nicht).
    Wenn es da noch eine Alternative für die Großen Datein gäbe wehre das schön^^


    Was soll das TextAsset denn können?

    Ja, einfach Text-Datein lesen. Die Rückgabe eines byte[] sollte voll ausreichen:D

    vieleicht byte[] data =TextAsset.loadFromAssetBundle(AssetBundle bundle, String path) so in die Richtung.

    Aber vieleicht ist das besser, das gesamte Pake von TextAsset.


    Oder soll das einfach nur ein Weg sein, einen String aus einem AssetBundle zu erhalten?

    Meinst du hiermit, man könnte dem Bundel noch Properties mitgeben:thinking:klingt Verlockend, aber denke das wird Komplizierter, also muss nicht sein:saint:


    Direkt bestehende Texte des Spiels ändern kannst du leider nicht, aber du kannst eigene Elemente einem beliebigen Ziel hinzufügen mit Internals.addUIElementToPlayer() :)

    :thumbup:genau das habe ich Übersehen


    (also Interface statt interface)

    Läuft:thumbup:



    Kann ich das [H] "Item weckstecken" ausführen?
    Das nervt ein bisschen beim Platzieren:/

    Dabei ist mir noch aufgefallen das player.getEquippedItem() immer NULL zurück gibt, das hatte glaube ich Patrick schon erwähnt wo er im Inventar getestet hatte.


    Ich habe mich noch mal ein bisschen mit dem Radialmenü beschäftigt.
    Ich habe versucht ein Radial Untermenü zu machen, dabei ist mir aufgefallen das es aktuell wohl nur ein Menü gibt
    Wehre es möglich das Radialmenü als UIRadial zurück zu geben und es wehre schön wenn mann es ausblenden und beenden könnte, also das Hauptmenü Ausblenden wenn man im Untermenü ist. Mann müsste dan zwar mehr Steuern aber wehre halb so wild.

  • Ja, der AssetBundles-Browser von Unity macht das nicht!

    Was meinst du denn jetzt? Dass das öffnen der Asset Bundles in Unity 3h dauert, oder wenn du es über die API im Spiel laden möchtest? :wat: Um welches Asset Bundle handelt es sich denn genau?


    Ja, einfach Text-Datein lesen. Die Rückgabe eines byte[] sollte voll ausreichen :D

    vieleicht byte[] data =TextAsset.loadFromAssetBundle(AssetBundle bundle, String path) so in die Richtung.

    Aber vieleicht ist das besser, das gesamte Pake von TextAsset.

    Also du möchtest quasi nur auf API Seite die Möglichkeit haben, den Text eines TextAssets auszulesen? Also im Grunde einfach nur sowas:

    Java
    TextAsset asset = TextAsset.loadFromAssetBundle(bundle, "mytext.txt");
    //Get text
    String text = asset.getText();
    //Get raw bytes
    byte[] bytes = asset.getBytes();


    Meinst du hiermit, man könnte dem Bundel noch Properties mitgeben :thinking: klingt Verlockend, aber denke das wird Komplizierter, also muss nicht sein :saint:

    Nein, ich meinte damit das, was du ja im Grunde selber geschrieben hast: Nämlich ob man einen String, also einen Text aus einem TextAsset auslesen können soll ^^


    Dabei ist mir noch aufgefallen das player.getEquippedItem() immer NULL zurück gibt, das hatte glaube ich Patrick schon erwähnt wo er im Inventar getestet hatte.

    Ja, leider ist die Item API generell noch sehr unvollständig (auch was Inventar usw angeht)... das werden wir auf jeden Fall noch ändern ;)


    Kann ich das [H] "Item weckstecken" ausführen?

    Nicht direkt... indirekt hätte man es mit "setEquippedItem()" umsetzen können, doch leider funktioniert auch das noch nicht... evtl. macht es aber Sinn, ggf. noch eine eigene "unequipItem()" Funktion o.ä. zu haben :thinking:


    Ich habe versucht ein Radial Untermenü zu machen, dabei ist mir aufgefallen das es aktuell wohl nur ein Menü gibt

    Du kannst durchaus verschachtelte Radial-Menüs machen: Im Callback des Radial-Menüs kannst du dafür einfach erneut player.showRadialMenu() mit den aktualisierten Werten aufrufen. Dafür sollte im oberen Radial-Menü aber "closeOnSelect" auf false gesetzt sein ;)


    Java
    player.showRadialMenu(icons, entries, null, false, (selection) -> {
    player.showRadialMenu(icons2, entries2, true, (selection2) -> {
    System.out.println("Selected: " + selection2);
    });
    });


    Wehre es möglich das Radialmenü als UIRadial zurück zu geben und es wehre schön wenn mann es ausblenden und beenden könnte, also das Hauptmenü Ausblenden wenn man im Untermenü ist

    Leider ist das nicht so einfach möglich, da das Radial-Menü ein Sonderfall ist (und daher nicht alle Funktionen eines UIElements unterstützt)... unmöglich ist es aber nicht, dafür müssten wir aber erst einige Anpassungen vornehmen. Ggf. können wir sowas in Zukunft anbieten, momentan ist aber die player.showRadialMenu() der einzige Weg :/

  • Was meinst du denn jetzt? Dass das öffnen der Asset Bundles in Unity 3h dauert, oder wenn du es über die API im Spiel laden möchtest? :wat: Um welches Asset Bundle handelt es sich denn genau?

    Ja, vieleicht weiß ich auch nicht wie das mit Unity genau geht, das muss ich noch mal in Ruhe Testen.
    Bislang habe ich den AssetBundeltBrowser installiert und geöffnet und hier verusche ich ein *.bin rein zu Ziehen und dann habe ich

    :hushed:


    Also im Grunde einfach nur sowas

    Das würde reichen:thumbup:


    evtl. macht es aber Sinn, ggf. noch eine eigene "unequipItem()" Funktion o.ä. zu haben

    Ja, vieleicht für de Überünerübernächste Update^^wenn setEquippedItem() klappt, ist das auch gut


    Im Callback des Radial-Menüs kannst du dafür einfach erneut player.showRadialMenu() mit den aktualisierten Werten aufrufen.

    Ja, das klappt soweit
    Ginge das auch Rekrusiv

    Könnte mann so mit Untermenüs Arbeiten?
    Werden da nicht Ketten gebildere derto mehr man hin und her Wandert, werden diese am ende auch Geschlossen
    Oder ist da der Vortei von "Short Living Events"?
    Müsste ich da noch etwas bereiniegen? (Damit Speicher nicht voll Läuft)


    Leider ist das nicht so einfach möglich, da das Radial-Menü ein Sonderfall ist

    ...

    dafür müssten wir aber erst einige Anpassungen vornehmen. Ggf. können wir sowas in Zukunft anbieten

    Oke, aber ganz Hinten auf die Liste!
    :thumbup:Es ist ja schon sehr schön das es jetzt ein RadialMenü gibt und aufjeden Fall zwei ebenen möglich sind:wow:
    wollte nur mal wissen was alles so geht:saint:


    :crazy:ich halte jetzt die Füße still bis Update Fertig ist:thumbup:

  • :lol:

    th?id=OIP.IHpVOG9YrHZ17bOrxzwbCgHaHa&pid=Api


    Hi red51 ,

    Kann das sein das die Assets anhand des HashCodes geladen/gehandelt werden?

    Ich kann ein und das selbe Bundel mit zwei Verschiedene Plugins und Unterordnern nicht mehrfach Laden, die Logs sehen Identisch aus gibt eine Check Summe aus

    Aber werde die Asset Daten noch Bilddaten werden aus dem "Zweiten" geladen


    Mit /3D bekomme ich nichts angezeigt aber das mit /Tools3D wird normal geladen:thinking:

  • red51, erstmal ein Super Danke für das Update.

    Ich bin noch nicht durch alles durch, aber auf den Ersten Bilck wollte ich mich mal vergewissern, was ich so erstmal mit Bekommen habe.
    Die VFX klappen wie gewohnt, nach dem das Bundle mit der 2022.2.21 neu erstellt wurde:thumbup:

    Was mich aber schon eine weile Verrückt macht ist, der Schatten:drunk:
    Wie hast du das gemacht das die vom Licht abgewante Seite nicht im Schwarzen Schatten Versinkt?

    Deine sachen werden nicht so dunkel


    Ich habe einen "ganz Normalen" HDRP/Lis benutzt


    Muss da noch eine Lampe mit rein, wenn ja welche?

  • Danke für das Feedback! :)


    Wie hast du das gemacht das die vom Licht abgewante Seite nicht im Schwarzen Schatten Versinkt?

    Hmm... normalerweise hängt das von den Umgebungsparametern ab, die aber ja eh vom Spiel vorgegeben werden :thinking: Ich könnte mir lediglich vorstellen, dass es mit der Ambient Occlusion zusammenhängt (was beim Standard HDRP Shader über die Mask-Textur definiert wird). Kannst du mir sonst das Asset Bundle (mit Prefab-Namen bzw. Pfad) ggf. einmal zusenden, damit ich mir das genauer anschauen kann?


    Muss da noch eine Lampe mit rein, wenn ja welche?

    Nein, davon würde ich eher abraten. Auch wenn du das Problem damit ggf. kaschieren kannst, jede Lichtquelle kostet relativ viel Performance, und es muss ja eigentlich eine andere Lösung geben ^^

  • Kannst du mir sonst das Asset Bundle (mit Prefab-Namen bzw. Pfad) ggf. einmal zusenden, damit ich mir das genauer anschauen kann?

    :DEtwas Gedult, ist auf einer Raspberry PI mit nur 100mb Swap:silenced:
    grenzsteinbasis.bundle-Link
    PW: Red51


    Ich lade die ohne Phat, gibt es da einen Unterschied?


    Die Prefab's liegen in Assets/AssetBundles/GrenzSteinBasis/...

    • GrenzStein_v2.prefab
    • GrenzStein_v2.01.prefab
    • GrenzStein_v2.02.prefab
    • GrenzStein_v2.03.prefab
    • GrenzStein_v2.04.prefab
    • GrenzStein_v2.05.prefab


    P.S. kein Stress, ich mache erst Mittags wieder weiter;)

  • red51 so wie es aussieht, hängt es ander Emissive Map

    Das sollte eigendlich die Helligkeit der Textur sein, ist mit Model gemacht und Funktioniert ohne Probleme:love:
    :DDann muss ich mir die Emissive Einstellungen, für Bundle, noch mal ansehen:thumbup:

  • red51,

    welches Layer ist für ein GameObject vorgesehen?
    Genauer gefragt, was kann ich über die Layer's bestimmen?

    • Layer.OBJECT, scheint für die GameObjecte zu sein, zumidestens klappt damit PlayerGameObjectInteractionEvent ausglöst zu werden
    • Layer.TRIGGER, scheint für Collision und ohne PlayerGameObjectInteractionEvent zu sein
    • Layer.SELECTOR, entfernt die Collision und auch kein PlayerGameObjectInteractionEvent

    Ich würde gern das PlayerGameObjectInteractionEvent, Ein oder Aus schalten, mit dem Richtigen Layer?

    Gibt es schon die möglichkeint den Coursor zu ändern für ein bestimmtes GameObjeckt?^^

  • Sämtliche Layer können für GameObjects verwendet werden ;) Das bestimmt in erster Linie dann, womit der Spieler kollidiert (also ob er dort durchlaufen kann oder nicht) bzw. ob der Spieler das Element schlagen kann.


    Wir müssen mal bei Gelegenheit eine Übersicht vorbereiten, welche Layer das Spiel für welche Art von Elementen verwendet. Oft ist der Name aber selbsterklärend (NPC für Npcs/Tiere, OBJECT für Objekte bzw. Möbel, WATER für Wasser usw).

    Im Zweifelsfall kannst du auch einfach Layer.DEFAULT verwenden ^^


    Stelle sicher, dass bei Raycasts o.ä. aber nicht direkt die Layer, sondern die Collision Bitmaske verwendet wird, zB player.raycast(Layer.getBitmask(Layer.DEFAULT), (RaycastResult result) -> { });


    oder

    player.raycast(Layer.getBitmask(Layer.CONSTRUCTIONS, Layer.OBJECTS), (RaycastResult result) -> { });

  • Kleiner Report an red51 ^^(auf DedicatedServer)

    Ich bekomme kein PlayerToggleInventoryEvent:thinking:

    Java
    @EventMethod
    public void onPlayerToggleInventoryEvent(PlayerToggleInventoryEvent event) {
        Player player = event.getPlayer();
        System.out.println("Toggle Inventory "+event.getStorage().getID());
    }


    Wenn ich setPickable Richtig Verstanden habe, sollte wenn 1.) Clickable ist und 2.) Pickable, bei der 3.) kein Event für 1.) ausgelöst werden?

    Was aber noch nich Funktioniert


    Gibt es eine möglichkeit das mann ein UIElement auf dem HUD und im Pausemenü anzeigen kann?
    Ein Kongkreter Ansatz wehre eine Real Time Uhr die in Beiden "Fenstern" zu sehen ist und auf der Pause Ebene wehre ja der Cursor schon da und man könnte dort die Uhr Konfigurieren
    Ich habe mal:

    Java
    player.addUIElement(uiElement);
    Internals.addUIElementToPlayer(player, uiElement, "InGameMenuLayer");

    versucht.

    Nur müsste ich da wohl mit zwei unterschiedlichen uiElemente arbeiten, da mir nur der erste eintrag richtig angezeigt wird, auch beim zeilentausch
    Ist das Absicht oder Teschnich bedingt?

  • Ich bekomme kein PlayerToggleInventoryEvent :thinking:

    Leider sind die meisten Inventar- und Item-Events sowie Methoden noch nicht implementiert :( Das betrifft auch das PlayerToggleInventoryEvent... das werden wir aber noch beheben ^^


    Wenn ich setPickable Richtig Verstanden habe, sollte wenn 1.) Clickable ist und 2.) Pickable, bei der 3.) kein Event für 1.) ausgelöst werden?

    ja genau. In dem Fall sollte - wenn man auf die 3 klickt - kein Event für 1 ausgelöst werden. Pickable beschreibt im Grunde, ob das Element "Kollision" hat, d.h. ob es von der Maus überhaupt angewählt werden kann oder nicht. Ein Element, welches nicht Pickable ist, kann nicht angeklickt werden (also das Event auslösen).

    Ein Element, was Pickable ist, blockiert den Mausklick bzw. das Event entsprechend für dahinterliegende Elemente.


    Gibt es eine möglichkeit das mann ein UIElement auf dem HUD und im Pausemenü anzeigen kann?

    Hmm... grundsätzlich ist das möglich. Ist zwar nicht ganz so elegant, aber die einzige Layer, die immer sichtbar ist, ist die sog. "DragDropLayer". Du müsstest das Element also mit Internals.addUIElementToPlayer(player, uiElement, "DragDropLayer"); hinzufügen, das müsste eigentlich funktionieren ;)


    Nur müsste ich da wohl mit zwei unterschiedlichen uiElemente arbeiten, da mir nur der erste eintrag richtig angezeigt wird, auch beim zeilentausch
    Ist das Absicht oder Teschnich bedingt?

    Ein UIElement kann leider nur auf einem Target gleichzeitig sein... :/

Participate now!

Don’t have an account yet? Create a new account now and be part of our community!