Jump to content
Unity Insider Forum

chrische5

Members
  • Posts

    387
  • Joined

  • Last visited

  • Days Won

    12

Everything posted by chrische5

  1. Hallo Ich nähere mich ganz langsam einem Ende bei meinem Spiel. Nun möchte ich eine Speicherfunktion anbieten. Dazu speichere ich Positionen, Questfortschritt.... Ich will aber auch die Inventare der Kisten und NPCs sichern. Im Spiel hat jede Kiste und alle Dinge mit Items ein eigenes Inventar mit den jeweiligen Items. Zum Speichern gehe ich alle Inventare durch und will die Ids der Items sichern, die sich im jeweiligen Inventar befinden. Beim Laden lese ich diese IDs aus, eine Funktion iteriert über alle Items des Spiel, vergleicht die IDs und schiebt diese dann in die entsprechenden Inventare. Das mache ich derzeit mit den Namen der Items und es funktioniert. Es ist demnach also ein akademisches Problem. Ich habe derzeit eine überschaubare Zahl an Items und Inventaren im Spiel, da geht das so, aber sobald ich einen Namen für ein Item doppelt vergebe, wird es natürlich problematisch. Ist mein Ansatz komisch? Christoph
  2. Hallo Ich suche eine Möglichkeit meinen Item, die so sind bei der Erstellung automatisch eine persistente ID zuzuweisen. Allerdings bekomme ich das nicht recht hin. Die Zuweisung funktioinert, aber die ID ist dauerhaft, sondern wird jedes Mal neu vergeben. Das ist schlecht, weil ich diese ID speichern will, um nachher die entsprechenden Items beim Laden wieder zu finden. Hat da jemand eine Lösung? Gehe ich das Problem vielleicht komplett falsch an? Christoph
  3. Hallo Odin kann das auch. Das nutze ich und bin sehr zufrieden damit. Christoph
  4. Hallo Aber die Frage war ja, ob du in die entsprechende Funktion kommst. Wird dein Debug also in der Konsole ausgegben? Du kannst auch einen Breakpoint setzen und dich von Zeile zu Zeile hangeln, wobei dein Spaghetticode da natürlich eher schlecht ist. Mein Anmerkung war auch keineswegs fies gemeint, sondern du wirst um die Grundlagen eh nicht herumkommen. Christoph
  5. Hallo Ohne dir zu Nahe zu treten, aber vielleicht ist der Code noch etwas viel für dich. Ich hatte das ; vergessen, aber das solltest du wirklich wissen oder eben ein Grundlagentutorial durcharbeiten. Christoph
  6. Hallo Du schreibst einfach Debug.Log("Hallo") vor den Code, den du aufrufen willst. Das ist unheimlich wichtig! Dadurch kannst du Variablen ausgeben, schauen, ob du Code erreichst, und und und. Christoph
  7. hallo was ist denn nun dein problem? chrische
  8. Hallo Eventuell kannst du ja die einzelnen Varianten der Waffen bereits als Prefab anlegen. Christoph
  9. Hallo So einfach kann die Welt sein. Danke für deine Geduld! Christoph
  10. Hallo Okay. Dann wäre die Logklasse dann eher ein Kandidat für eine Singleton oder profan eine SODA gloable Variable? Christoph
  11. Hallo Ahh. Okay. So langsam verstehe ich. Die Idee mit dem GAmeService kam mir auch falsch vor, weil es am Ende ja nur einen anderer Name für Manager ist. Hältst du eine solche Logklasse also eher für ungeeignet für die Settings? Viel mehr als Daten halten, macht die am Ende aber auch nicht. Mit Settings hat es allerdings wenig zu tun. Christoph
  12. Hallo Ich muss noch einmal nachfragen, bitte entschuldige mich, wenn die Frage unsinnig sein sollte. Du sagst also, dass es für den Compiler ein Unterschied ist, ob ich: GameService.GetLog().WriteDebug("no textMesh for news attached", name); oder ModuleSettings.Get<Log>().WriteDebug("no textMesh for news attached", name); schreibe? Wenn nicht, verstehe ich den "Umweg" über die statische Klasse nicht, weil das ja ein zusätzliches Element in meinem Projekt ist, welches ich gar nicht brauche. Wäre das was anderes? public static class GameService { private static Log _log; static GameService() { _log = ModuleSettings.Get<Log>(); } public static Log GetLog() { return _log; } } Hier würde ich den Unterschied verstehen, weil ich bei GetLog() ja nicht immer Get<Log> nutze. Eventuell stehe ich komplett auf dem Schlauch... Christoph
  13. Hallo Also ich verstehe es nicht ganz. Eventuell zeigst du mal noch Code? Christoph
  14. Hallo Das ist mir klar. Ich habe mir die Größe und den Inhalt in den project settings angeschaut. Macht das in diesem Fall einen Unterschied? Und wie beantwortet das meine ursprüngliche Frage? Christoph
  15. Hallo Nein. Habe ich nur gemacht, um im Editor den Inhalt sehen zu können. Christoph
  16. Hallo Hier die ganze Klasse: using System; using System.Collections.Generic; using ThirteenPixels.Soda.ModuleSettings; using UnityEngine; namespace Chrische { public class Log : ModuleSettings { #region Variables [SerializeField] private List<string> _allUserEntries = new List<string>(); [SerializeField] private List<string> _absolutAllEntries = new List<string>(); private readonly Dictionary<string, List<string>> _dicEntries = new Dictionary<string, List<string>>(); protected override string title => "My Log"; #endregion public void Write(string entry) { var wholeEntry = DateTime.Now + " " + entry; _allUserEntries.Add(wholeEntry); _absolutAllEntries.Add(wholeEntry); } public void Write(string tree, string entry) { var wholeEntry = DateTime.Now + " " + entry; _absolutAllEntries.Add(wholeEntry); if (tree != "Debug") { _allUserEntries.Add(wholeEntry); } if (!_dicEntries.ContainsKey(tree)) { _dicEntries.Add(tree, new List<string>()); } _dicEntries[tree].Add(wholeEntry); } public void WriteDebug(string message, string className) { Debug.Log("#" + className + "#: " + message); Write("Debug", message); } #region Properties public List<string> AllUserEntries => _allUserEntries; public List<string> AbsoluteAllEntries => _absolutAllEntries; public Dictionary<string, List<string>> DicEntries => _dicEntries; #endregion } } Christoph
  17. Hallo Eigentlich nur ein paar Listen mit strings und ein Dictionary. Dazu dann eben ein paar Methoden, um die Listen zu füllen. Christoph
  18. Hallo Wenn dein Script an dem Parent des Colliders hängt, kannst du ja bei TriggerEnter2D() per GetComponentInParent() auf das Script zugreifen. Christoph
  19. Hallo Da es vielleicht auch andere interessiert, frage ich hier mal öffentlich und nicht per pm. Nach etwas probieren, stelle ich mir die Frage, wozu ich eine statische Klasse brauche, um auf meine Daten zu zugreifen? Warum greife ich nicht direkt per ModuleSettings.Get<InputSystemSettings>(); auf die benötigten Daten zu? Jetzt habe ich folgendes: public static class GameService { public static Log GetLog() { return ModuleSettings.Get<Log>(); } } und greife dann per: GameService.GetLog().Write("Debug","Enter WalkState"); darauf zu. Warum der Umweg über die statische Klasse? Habe ich etwas komplett falsch verstanden? Danke Christoph
  20. Hallo Das dürfte die Lösung deines Problems sein: https://docs.unity3d.com/ScriptReference/Component.GetComponentInChildren.html Das gleiche geht auch andersherum - dann GetComponentInParent(); Immer daran denken, dass auch eine Variante mit s gibt. Also GetComponentsInChildren() Christoph
  21. Hallo Also bei mir hat alles wunderbat geklappt. Dazu kam gleich noch der Erkenntnisgewinn, dass es ja Dinge gibt, die man über alle alle Szenen hinweg braucht. Hatte ich noch gar nicht verinnerlicht. Ein Logsystem ist genau so etwas. Das hatte ich bisher immer an einem GameManager hängen und da ich deine Abneigung kenne, habe ich mich immer schlecht dabei gefühlt. Des Weiteren hätte ich diesen in jeder neuen Szene neu erstellen müssen. So fällt das nun weg. Christoph
  22. Hallo Wow. Das klingt toll. Wenn ich es richtig verstanden habe, ist es dazu noch genau das, was ich für mein logsystem brauche. Ich werde es probieren. Christoph
  23. Hallo Genau das meinte ich. Sorry. Ich habe gesehen, dass es ein neues Update gab. Christoph
  24. Hallo Was hast du denn diesmal reingebastelt? Christoph
  25. Hallo Am ende wird so etwas wahrscheinlich egal sein. ich gestehe, dass ich meist so etwas wie clear nutze, weil ich davon ausgehe, dass das bestmöglich geht. kommt natürlich immer auf das genaue szenario an. christoph
×
×
  • Create New...