Jump to content
Unity Insider Forum

Strooja0108

Members
  • Content Count

    69
  • Joined

  • Last visited

Community Reputation

0 Neutral

About Strooja0108

  • Rank
    Advanced Member

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

  1. Ah sehr cool jetzt klappts. Koenntest du diese Zeile erklaeren ? private ItemType currentlyDisplayedItem => items[displayIndex]; mBei dieser Zeile, muss man hier keinen Wert angeben wonach er suchen soll? Also nach dem selben namen,oder selben preis. oder muss einfach alles uebereinstimmen? if (items.TryGetValue(type, out var result)) Bei dieser Zeile, was soll das usepropertyname? Und das (get; private set;)? [field: SerializeField, UsePropertyName] public string title { get; private set; } Hier updatest du ja den displayindex. Aber wo genau wird das currentlyDisplayedItem geupdated? public void IncrementIndexAndDisplay(int inc) { displayIndex = Modulo(displayIndex + inc, items.Length); DisplayItem(currentlyDisplayedItem); Macht das diese Zeile automatisch? private ItemType currentlyDisplayedItem => items[displayIndex]; Seh ich das also richtig das du einmal SOs nimmst um die einzelnen items festzulegen und dann nochmal ein Dictionary um die Anzahl festzuhalten? Ich habe sowas aehnliches gemacht.Also bei den Genres habe ich meine Datenbank Variante benutzt wie am Anfang des Threads erklaert. Aber bei meinem Kaufmenue habe ich es ahenlich wie du gemacht. Nur anstatt SOs habe ich normale Gameobjects benutzt,damit ich auch die Anzahl direkt zu jedem item dazu speichern kann.NAtuerlich habe ich dadurch einen haufen Gameobjekts im Spiel. Aber gibt es sonst nich Nachteile; Was ich aus deiner Scene mitnehme (bis auf ein paar coole Codeschnipsel) Ich sollte probieren alle Arten von Berechnungen in separate static scripts zu packen um diese dann von anderen scripts einfach aufrufen zu koennen. Damit umgehe ich diese ewige instanzieren von anderen scripten,dass ich ja sehr viel mache. Ausserdem packst du die scripte auch oft direkt auf die gameobjekte fuer die die scripte bestimmt sind. Nicht wie ich der ein "Manager" objekt erstellt.
  2. Nee sorry es laueft bei mir nicht.Magst du das Project einmal komplett ausgeben so wie ich das gemacht habe? Damit ich einen Ueberblick ueber deinen Weg bekomme.
  3. Ja da hast du schon recht. Ich sehe gerade selbst das es immer umfangreicher wird und schwerer durchzublicken. Ich denke mir zur Zeit aber das ich erstmal alle Funktionen implementiere um zu schauen wie der Spielflow ist. Danach kann ich im schlimmsten Fall nochmal alles neu programmieren. Aber erstmal sollte ich wissen ob meine Spielidee ueberhaupt fuer Spass sorgt. Zu deinem Example. Wenn ich deine Datei lade, sehe ich nur die scripts unten aber im viewer sehe ich keine Buttons oder sonst was. Also wenn ich das Programm starte sehe ich einfach nichts. Wenn du den Code noch etwas kommentieren koenntest waere das super.Aber ich will auch nicht das du da jetzt zu viel Zeit reinsteckst.
  4. Hey Sascha vielen Dank wieder einmal fuer deine Hilfe. Ich bin ganz ehrlich ich habe kein Plan was du in deiner Datei tust. Ich kriege es nicht mal hin es vernuenftig zu laden und auch wirklich was zu sehen. Deswegen habe ich mir die Scripte einfach angeguckt wobei ich da praktisch nichts verstehe. Ich glaube dir sofort das deine Version besser ist. Aber kannst du mir sagen ob mein Weg ein absolutes no go ist? Du schreibst oben Und ganz genau das ist ja das was ich moechte. Ich brauche die Daten aus meiner Datenbank in 10 Scripten von daher war es mir wichtig das ich darauf einfach Zugriff habe von ueberal. Den ich jetzt mit dem static weg ja so wie ich es verstehe auch habe. Ich habe in meinem Fall halt nur eine Kaufmenue Datenbank in dem ALLE Items drinstehen. Manche davon werde einfach durch eine variable erst spaeter dazu geschaltet.Aber sie stehen schon von Anfang an drin. Ausserdem ist mein Kaufmenue Datenbank auch gleichzeitig mein Player Inventar. Durch die "Anzahl" weiss ich ja was er besitzt und das lade ich dann einfach wenn ich auf sein Inventar zugreife. Ich denke dein Script ist fuer mich noch viel viel zu hoch.Deswegen nochmal die Frage kann man das so wie ich machen oder ist es einfach kompletter mist??
  5. Allso erstmal du siehst scheinbar wie kompliziert und dumm ich denke anhand des letzten Falles xD . So logisch das man einfach die Referenz kopieren kann, aber daran hab ich nicht gedacht. So ich habe mir jetzt mal Zeit genommen und meine Idee von einem Inventar kurz und knapp umgesetzt und hoffe du kannst mir sagen was da schief laeuft. Denn ich habe irgendwie das Gefuehl das ich und du sehr viel zu unerschiedlichen Punkten springen. Ich werde nur noch verwirrter gerade.^^ Ich weiss das man danach eigentlich nicht fragt aber basierend auf meinem Beispiel File. Koenntest du mir das einmal so erstellen wie du sowas machen wuerdest? Was nach dem Kauf der Getraenke moeglich sein soll ist einfach, dass ich einen anderen Button(Trinken) klicke, der das Menu wieder aufruft und anstatt des Kaufen Buttons habe ich einen Button "Trinken". Wenn ich darauf klicke verschwiendet eines der Getraenke. Ps: Wenn du mir auch noch erklaeren koenntest warum die PreItemList sich im Inspector updated(die item anzahl),wenn ich ein neues Item kaufe. Obwohl ich die PreItemList niemals update. Dann waere das echt spitze. Ich vermute es hat was damit zutun das ItemList static ist. Aber das ist nur eine vermutung.Verstehen wuerde ich es nicht xD TestInventar.rar
  6. Ich hab das jetzt so probiert ,dass ich zum Start einfach das public Array in das static Array reinkopiere. Aber er meckert schon in der Zeile: GamesList.genreName = PreGamesList.genreName; NullReferenceException: Object reference not set to an instance of an object Gamesscript.Start () (at Assets/Scripts/Gamesscript.cs:51) Die beiden Debug.Logs geben aber richtige Ergebnisse aus. using System.Collections; using System.Collections.Generic; using UnityEngine; public class Gamesscript : MonoBehaviour { public static Gamedetails[] GamesList; public Gamedetails[] PreGamesList; [System.Serializable] public class Gamedetails { public string genreName; public float genreEXP; public float genreEXPMulti; public float[] genrenervous; public int genreMood; public int genreLevel; public int[] nextlevelExp; public float genreTrendMulti; public int genreUnlocked; public int genreUnlockLevel; public int genreEquipt; public int genreRang; public int[] genreRangEXP; public int[] genreRangExtraZuschauer; public int[] genreRangExtraHappy; public int[] genreRangExtraAngry; public float viewerKids; public float viewerTeens; public float viewerAdults; public int winsTotal; public int losesTotal; public int winsPerDay; public int losesPerDay; public int optimalInteraction; public int currentInteraction; }
  7. Danke abermals fuer die schnelle Antwort. Ich glaube ich bin da gerade einfach sehr ueberfordert. Das du das Beispiel mit meinem Inventar gebracht hast, finde ich sehr gut das haette ich naemlich auch so angebracht. Genau in in so einer Datenbank habe ich naemlich auch mein Inventar erstellt. Ich verstehe deinen Post jetzt so, dass ich das alles in Scriptable Objects umwandeln so . Das bedeutet jetzt aber wenn ich einen "Tennisschlaeger" im Shop kaufen wuerde ,dann wuerde ich sobald ich auf den Kauf Button klicke, ein SO vom Tennisschlaeger erstellen. Wenn ich nochmal darauf klicke wird ein zweites SO erstellt. Wenn ich jetzt angezeigt bekommen moechte wie viele Tennisschlaeger ich besitze muss ich alle vorhandenen SO vom Tennisschlaeger zusammen zaehlen um die Anzahl zu bestimmen.Denn soweit ich weiss ist es nicht so einfach ein SO zu erstellen und dann waehrend des Spiels ein Variablenwert im SO zu veraendern(wie in diesem Beispiel die Variable Anzahl, sehr praktisch dafuer waere).Denn selbst wenn das Spiel beendet wird, wird der Wert nicht auf den Default wert zurueckgesetzt in einem SO. Bei sowas wie Anzahl kann man vielleicht noch tricksen, aber um nochmal auf das Beispiel von oben zurueck zu kommen. Wenn ich die Variable "totalWins" alle 5 Sekunden veraendere, dann ist doch ein SO nicht der beste Weg oder? Deshalb dachte ich fuer diese Genre List und auch fuer meine Inventarlist, sind Datenbanken am besten . Ich erstelle die Datenbanken gefuellt mit alle Genres und Items. Und muss nur die totalwins bzw. die Anahl veraendern.Somit habe ich auch nicht hunderte SOs in meinem Spiel rumfliegen.
  8. xD Ich habe gerade festgestellt das ich das Script ja garnicht auf ein Gameobjects legen kann, wenn es statisch ist. Und somit ja auch garnicht bequem ueber den Inspector die Werte zuweisen kann. Also habe ich wieder einmal keine Idee wie ich das machen soll. Und jetzt weiss ich auch was du in deinem letzten Abschnitt meinst xD
  9. Wow Sasha vielen lieben Dank fuer diese super ausfuehrliche Antwort. Das hat mir auf jeden Fall sehr weitergeholfen. Alsooooo fangen wir mal an . xD Ich glaube die richtige Antwort(meines erachtens)hast du mir schon geschreiben. Ich erklaere vorher nochmal eben genauer was in meinem Spiel passiert. Also mein Spiel ist ein Tycoon Game. Es ist moeglich das mein Character sich an den PC setzt und dann anfaengt verschiedene Spiele Genres zu spielen. Basierend auf seeeeehr vielen Variablen und Berechnungen wird dann entschieden ob er eine Runde in dem Genre gewinnt oder verliert. Danach faengt das wieder von vorne an. In dieser Liste die ich im Anfangspost beschrieben habe geht es also darum diese Spielergebnisse festzuhalten. Dementsprechend ist es wirklich einfach wie eine Datenbank die man VERAENDERT. NICHT befuellt und verlaengert, sondern die Daten(die ich gerne sauber uebern Inspector eintragen moechte) sollen nur waehrend des spielens veraendert werden. Wie zum Beispiel erfahrungspunkte,oder Siege in dem Genre. Dementsprechend gibt es diese Datenbank auch nur EINMAL in meinem Spiel. Dementsprechend bin ich davon ausgegangen das Scriptable Objects keine gute Idee sind, weil sich hier ja nur Daten festlegen lassen aber nicht wirklich veraendern.(wie du mir in einem anderen Post einmal erklaert hast.) Ich denke den richtigen Weg hast du mit den statischen Variablen schon aufgezeigt. Ausserdem hast du recht das ich zurzeit diese Liste einfach auf einem leeren Gameobject habe um dort bequem die Startwerte zu erstellen. Ich habe das gemacht damit ich nicht wie du in deinem Beispiel : new GenreDetails { genreName = "Foo", genreEXP = 10f, // ... }, new GenreDetails { Die Werte im Code festlegen muss( habe es immer so verstanden das man das so gut es geht vermeiden soll. Was ja auch Sinn ergibt). Sondern ich es vernuenftig ueber den Inspector befuellen kann. So sieht das bei mir jetzt aus: using System.Collections; using System.Collections.Generic; using UnityEngine; public class Gamesscript : MonoBehaviour { public Genredetails[] GenreList; public class Genredetails { public string genreName; public float genreEXP; public float genreEXPMulti; public float[] genrenervous; public int genreLevel; public int[] nextlevelExp; public float genreTrendMulti; public int genreUnlocked; public int genreUnlockLevel; public int genreEquipt; public int genreRang; public int[] genreRangEXP; public int[] genreRangExtraZuschauer; public int[] genreRangExtraHappy; public int[] genreRangExtraAngry; public float viewerKids; public int winsTotal; public int losesTotal; public int winsPerDay; public int losesPerDay; public int optimalInteraction; public int currentInteraction; } } Ich denke meine Loesung und warum ich das so machen moechte ist einfach ,weil ich so den Endruck habe das es am uebersichtlichsten fuer mich ist. Ich denke ich werde das jetzt mal probieren zu einer static class umzuwandeln. Nachdem du mein Beispiel jetzt noch einmal ausfuehrlich gesehen hast. Denkst du immernoch das ist eine gute Loesung?
  10. Hallo Leute, ich habe ein "script" das so aussieht " Gamesscript public Genredetails[] GenreList; [System.Serializable] public class Genredetails { public string genreName; public float genreEXP; public int genreLevel; public int[] nextlevelExp; public int genreUnlocked; public int genreUnlockLevel; public int winsTotal; public int losesTotal; public int winsPerDay; public int losesPerDay; } Es ist im Prinzip wie eine Bilbiothek mit verschiedenen Genres und deren Details. Jetzt frage ich mich sollte ich das in ein einzelnes script packen (und dann auf ein leeres gameobject?)und wenn ja wie deklariere ich das am besten? Ich moechte auf die Daten von verschiedenen Scripten zugreifen koennen(schreiben und lesen). Zurzeit schreibe ich in jedes Script public Gamesscript gamesscript. Und weise das script im Inspector zu.Das ist aber eine sehr bescheidene Loesung, da ich viele dieser Bibliotheken mit Datensaetzen habe und ich nicht moechte das ich in jedem skript alles deklarieren muss. Ich ware fuer jede Hilfe dankbar
  11. Haette da jemand eine Idee ob das so sinvoll ist , bzw. wie das geht?
  12. Timescript macht vieles, wie zum Beispiel die Zeit generieren,oder bestimmte events.Von einem anderen script aus gucke ich dann im Timescript nach wie spaet es ist und dementsprechend kommt eine Textbox wo drin steht"Komm bite zum Fruehstueck/Mittagessen/Abendessen". Ich benutze halt scripte oft um es einfach ueberscihtlicher fuer mich zu machen, oder um scripte zu pausieren oder weiterlaufen zu lassen.Der einzige weg den ich allerdings kenne wie das geht,ist einfach das gameobject auf dem das skript liegt zu aktivieren oder deaktivieren. Das Problem ist halt das ich so viele verweise zwischen den ganzen Skripten habe das der definitionsbereich in jedem skript schon super lang ist und fast immer gleich aussieht.Aber ich denke dann kann ich ja alle skripte static setzen die nur einmal vorkommen und object unabhaengig sind,richtig?Sollte ich dann einfach alle variablen static setzen oder reicht es die Klasse static zu setzen und die variablen werden dann automatisch static? Wie mache ich das denn aber bei einem Button? Ich habe einen Button den ich von 10 Skripten aktivieren oder deaktivieren moechte.Muss ich den in allen Skripten definieren oder geht das auch einfacher?Mit static gehts ja nicht weil man einem static gameobject kein object zuweisen kann im inspector.
  13. Hallo Leute, ich bin nach langer Abwesenheit auch mal wieder da.Hoffe es geht allen gut. Ich habe da mal eine Frage zu "sauberen"programmieren(keine Ahnung ob das so passt ^^). Ich habe knapp 20 Skripte die alle auf das Skript Timescript zugreifen . In all meinen 20 Skripten habe ich deshalb die Zeile public Timescript timescript; stehen und im Inspektor weise ich dann dieses Skript zu.Das selbe mache ich noch mit 5-10 anderen Skripten und 10 Objekten.Jedesmal das selbe. Da muss es doch einen deutlich besseren Weg geben. Habe was von static gelesen womit das auch scheinbar gut funktioniert. Ist das denn die richtige Loesung? Ich habe verstanden das static geht, weil es Klassen bezogen ist und nicht Objekt bezogen.Da ich jedes Skript nur einmal benutze sollte das also klappen. Bei Objekten ,wie zum Beispiel einen Button klappt das ja nicht,da das Objekt bezogen werde. Zum Beispiel moechte ich aus 10 verschienden Skripten ,den selben Button interactable, true oder false setzen koennen. Ohne den in jedem Skript neu definieren zu muessen. Wie geht sowas am besten? Und wie geht sowas mit einem Skript am besten? Wuerde mich sehr ueber eine Loesung freuen,damit ich meine Skripte mal aufraeumen kann.
  14. brilliant exakt danach habe ich gesucht. Den oberen Teil aufs Prefab legen und den unteren kann ich dann von einem anderen Script aufrufen und direkt ein wert mitgeben. Ich weiss nicht warum ich darauf nicht gekommen bin,denke da fehlt mir die Erfahrung. Vielen dank fuer die ausfuehrliche Erklaerung. Ich werde heute Abend mal meine alte Variante hier reinschreiben nur um mal zu hoeren was du davon haelst.
  15. Ahhh okay das ergibt Sinn. Jetzt verstehe ich auch deinen Gedankengang ,danke schoen. Ich vermute das wird bei mir etwas kompliziert weil ich in meiner Version zu viele Prefabs haben muesste.Aber es ist gut zu wissen wie es sonst auch noch geht. Ich mache das jetzt gerade so das ich aus einer Liste einen Text random herauslese und je nach Text ,wird hinter dem Text unterschiedliche animierte Emojis angezeigt oder halt der Button. Das mit dem Button muss ich halt noch ausprobieren(mit dem addlistener),hatte heute leider keine Zeit.Aber falls es nicht klappt komme ich dann vermutlich auf deine idee zurueck mit den unterschiedlichen Prefabs. Gibt es da irgendeinen Vorteil den ich gerade nicht sehe. Ich finde das eigentlich ganz angenehm ein Prefab zu haben und das einfach dann zu veraendern. Hat das extreme Nachteile?
×
×
  • Create New...