Jump to content
Unity Insider Forum

Hermetes

Members
  • Content count

    163
  • Joined

  • Last visited

  • Days Won

    1

Hermetes last won the day on May 5 2016

Hermetes had the most liked content!

Community Reputation

4 Neutral

About Hermetes

  • Rank
    Advanced Member

Recent Profile Visitors

1,160 profile views
  1. Hermetes

    Die nächste Save Question! ^^

    Oh mir fiel es gerade auf! "theme_color" + i muss es natürlich heissen. Die Themebox übernimmt die Sachen nun wieder nicht, es ist zu spät heute...mache Feierabend.
  2. Hermetes

    Die nächste Save Question! ^^

    Tausend Dank Dir Sascha!!! Der Compiler meinte das man den Type zu einer Variable ersetzen muss. Also machte ich SerializeColor(color)) zu : PlayerPrefs.SetString(key, SerializeColor(c)); Weiss nicht ob das richtig war Habe nämlich deinen Debug Error bekommen. Debug.LogError("Could not deserialize color."); Und so in Save() eingeschrieben: SetColor("theme_color + 1", saveThemeList[i].themeColor); In Load() var themeColor = GetColor("theme_color" + i); theme.themeColor = saveThemeList[i].themeColor; Playerprefs habe ich mir nicht unbedingt ausgesucht. Es erschien mir am leichtesten.😌 Zu was tendierst du denn ? Json oder XML ?
  3. Hermetes

    Die nächste Save Question! ^^

    Sascha , ich hab´s beinahe! Ich taste mich von einer Variablen zur nächsten. Mit dem Namen und der ID klappts! Und nun weiss ich nicht wie ich bei der Color vorgehen muss. Also, wie bringe ich das string zu Color zurück? saveThemeList.Add(new SaveTheme(themeIndex, themeName, themeColor, themeboxPrefab)); themePrefab.GetComponent<ThemeBox>().themeName = saveThemeList[i].themeName; themePrefab.GetComponent<ThemeBox>().themeID = saveThemeList[i].themeIndex; themePrefab.GetComponent<ThemeBox>().themeColor = saveThemeList[i].themeColor; Mein Struct: public SaveTheme (int index, string name, Color themecolor, GameObject prefab) { this.themeIndex = index; this.themeName = name; this.themeColor = themecolor; this.themePrefab = prefab; } Fehlermeldung: SaveManager.cs(99,65): error CS1503: Argument 3: cannot convert from 'string' to 'UnityEngine.Color' SaveManager.cs(103,60): error CS0029: Cannot implicitly convert type 'string' to 'UnityEngine.Color' Meine Umwandlung zum String var themeColor = PlayerPrefs.GetString("theme_color" + i); Das war ein gutes Beispiel mit der Vector 3! Irgendwie assoziere ich ein struct als ein neutraler Wert. Mag vielleicht wieder falsch sein, aber so funktioniert meine Denke.
  4. Hermetes

    Player Inventar mit Ui und Drag and Drop

    Du kannst das auch ohne Scriptable Object. Ich rate es dir sehr, das ist sehr kompakt und übersichtlich. Es genügt eine einzige Zeile um ein Scriptable zu erzeugen. Die Liste erkennt den gleichen Typ nicht, das kann aber die Dictionary. Das ist das tolle, ich gehe mal davon aus du einige Items stackable machen möchtest. Sonst würde dir echt eine Liste reichen. Im ip (also InventoryItem ip ) ist bereits dein Item mit der Anzahl zusammengefasst. Key und Value , richtig. Eigentlich ist nichts gegen die Namespace einzuwenden....ich hasse das nur! Zu Beginner Zeiten raffte ich nicht warum ich da nicht zugreifen konnte. Darum die Ablehnung, und ästhetisch siehts auch nicht aus. haha...wie große das You Tube Fenster geworden ist!
  5. Hermetes

    Player Inventar mit Ui und Drag and Drop

    Vorsicht , hier schreibt dir eine Laie. Möchte Dir aber trotzdem gerne helfen. Es findet sich bestimmt noch jemanden der mich ergänzt. Ich würde ein Inventar immer mit Dictionaries und Scriptable Objects lösen. Sagen Dir die beiden Dinge was? Deine Drag und Drop seperat machen. Deine Slots kannst du aujedenfall mit Arrays machen. Willst du wirklich Namespace nutzen? z.B. private Dictionary<InventoryItem, int> items = new DictionaryItem,int>(); public Image[] ItemSlots public bool AddItem(InventoryItem ip) { // Ist das Item noch nicht im Inventar enthalten? if (!items.Containskey(ip)) { { if (items.count < ItemSlots.Length) //Prüft ob noch Slots verfügbar sind items.Add(ip,1); // Legt das Item neu an } else return false; } else items[ip]++; // Wenn Item schon in einer deiner Slots, dann zähle Item um 1 hoch. (Wenn deine Items stackable sein sollen) // Hier deine Slots durchlaufen return true; }
  6. Hermetes

    Die nächste Save Question! ^^

    Aber ich habe den Grund noch nicht so ganz verstanden. Legt man ein struct an um sicher zu stellen das alle Variablen bei einer neuen Initialisierung deklariert werden? Oder geht es eher darum, daß die fehlende Referenz verhindern soll das z.B. beim 3. Auto aus der Autofarbe plötzlich die Sitzpolster Farbe wird ? Ich glaube es sickert beim mir tatsächlich durch! Habe es zu struct geändert. Das hat wirklich Sinn. Kann ich jetzt mein Save() so stehen lassen? Und wie sieht´s dann bei Load() aus? using UnityEngine; using System; [Serializable] public struct SaveTheme { public int themeIndex; public string themeName; public Color themeColor; //public Transform themeHolder; // public GameObject themePrefab; public SaveTheme (int index, string name, Color color) { this.themeIndex = index; this.themeName = name; this.themeColor = color; } }
  7. Hermetes

    Die nächste Save Question! ^^

    Und ist das für meine Collections dann eine (stabelbare) struct oder kann ich das frei wählen ? Und so ein Konstruktor ist doch eigentlich immer in der selben Klasse oder? (Weil die Variablen sich ja da befinden ,oder?) Habe das jetzt mal ohne struct gemacht......wann ist ein struct ein struct? using UnityEngine; using System; [Serializable] public class SaveTheme { public int themeIndex; public string themeName; public Color themeColor; public Transform themeHolder; public GameObject themePrefab; public SaveTheme (int index, string name) { this.themeIndex = index; this.themeName = name; } } using System.Collections; using System.Collections.Generic; using UnityEngine; public class SaveManager : MonoBehaviour { public static SaveManager instance; public int ThemesCount; public GameObject themeboxPrefab; public Transform themeBoxHolder; private SaveTheme[] saveTheme; public List<SaveTheme> saveThemeList = new List<SaveTheme>(); //public List<SaveTheme> ThemeList = new SaveTheme(); void Awake() { instance = this; //themeboxPrefab = (GameObject)(Resources.Load("ThemeBox")); themeBoxHolder = GameObject.FindGameObjectWithTag("ThemeHolder").transform; } void Start() { ThemesCount = PlayerPrefs.GetInt("Themes"); } public void SaveThemeInfo(ThemeBox box) { SaveTheme theme = new SaveTheme(box.themeID, box.themeName); theme.themeIndex = box.themeID; theme.themeName = box.themeName; theme.themeColor = box.themeColor; theme.themeHolder = themeBoxHolder; theme.themePrefab = themeboxPrefab; saveThemeList.Add(theme); } public void Save() { PlayerPrefs.SetInt("Themes", saveThemeList.Count); for (int i = 0; i < saveThemeList.Count; i++) { PlayerPrefs.SetString("theme_name" +i , saveThemeList[i].themeName); PlayerPrefs.SetInt( "theme_index" +i, saveThemeList[i].themeIndex); } PlayerPrefs.Save(); Debug.Log("Saved"); } public void Load() { ThemesCount = PlayerPrefs.GetInt("Themes"); for (int i = 0; i < ThemesCount; i++) { saveThemeList[i].themeName = PlayerPrefs.GetString("theme_name" + i); saveThemeList[i].themeIndex = PlayerPrefs.GetInt("theme_index" + i); } Debug.Log("Loaded"); } public void DeleteAllThemes() { //savesT_Title.Clear(); //savesT_ID.Clear(); //savesThemeBox.Clear(); // ThemesCount = PlayerPrefs.GetInt("themeCount"); PlayerPrefs.DeleteAll(); } }
  8. Hermetes

    Die nächste Save Question! ^^

    Hab´s leider nicht verstanden. Wüsste jetzt nicht wie der Konstruktor aussehen sollte. Also die Collection wird schon relativ groß. Geplant sind 11 Variablen + noch eine Liste (von der ich noch nicht weiss wie realisieren)
  9. Hermetes

    Die nächste Save Question! ^^

    public void Load() { ThemesCount = PlayerPrefs.GetInt("Themes"); for (int i = 0; i < ThemesCount; i++) { saveThemeList[i].themeName = PlayerPrefs.GetString("theme_name" + i); saveThemeList[i].themeIndex = PlayerPrefs.GetInt("theme_index" + i); } Debug.Log("Loaded"); }
  10. Hermetes

    Die nächste Save Question! ^^

    Das hatte ich auch so gemacht Sascha.Jetzt habe ich allerdings keine Einträge wenn ich Load ausführe. Ich kann ja keinen List.Count speichern darum habe ich das über die int ThemeCounts gemacht. Aber ich sehe hier gerade was komplett nicht. ThemesCount = PlayerPrefs.GetInt("Themes"); for (int i = 0; i < ThemesCount; i++) { saveThemeList[i].themeName = PlayerPrefs.GetString("theme_name" + i); saveThemeList[i].themeIndex = PlayerPrefs.GetInt("theme_index" + i); } Debug.Log("Loaded"); }
  11. Hermetes

    Die nächste Save Question! ^^

    Ich weiss nicht wo ich das + i beim laden unterbringen soll. Oft klappt das ja zufällig bei mir ^^. ThemesCount habe ich in die Start gelegt. Das funktioniert.
  12. Hermetes

    Die nächste Save Question! ^^

    Ich kann nicht mal sagen das es ein Versehen war, habe das tatsächlich auch als Liste gesehen ^^. Nachdem Load habe ich keine Werte in den Variablen. Wo steckt denn da der Wurm? for (int i = 0; i < ThemesCount; i++) { //saveThemeList[i].themeName = PlayerPrefs.GetString("theme_name"); saveThemeList[i].themeIndex = PlayerPrefs.GetInt("theme_index"); saveThemeList[i].themeName = PlayerPrefs.GetString("theme_name"); }
  13. Hermetes

    Die nächste Save Question! ^^

    Ich mache meine erste Schritte im Thema Save überhaupt. Habe Variablen in einer "Serializable Class <SaveTheme>. Diese <SaveTheme> Klasse wird bei jedem Click auf einem Button erzeugt. Und landet in ein er Liste : saveThemeList. Bei Ausführen von Save() bekomme ich diese Exception. NullReferenceException: Object reference not set to an instance of an object SaveManager.Save () (.../SaveManager.cs:154) Zeile 154: PlayerPrefs.SetString("theme_name" +i , saveTheme.themeName); public void Save() { PlayerPrefs.SetInt("Themes", saveThemeList.Count); for (int i = 0; i < saveThemeList.Count; i++) { PlayerPrefs.SetString("theme_name" +i , saveTheme[i].themeName); PlayerPrefs.SetInt( "theme_index" +i, saveTheme[i].themeIndex); } PlayerPrefs.Save(); Debug.Log("Saved"); } public void SaveThemeInfo(ThemeBox box) { SaveTheme theme = new SaveTheme(); theme.themeIndex = box.themeID; theme.themeName = box.themeName; theme.themeColor = box.themeColor; theme.themeHolder = themeBoxHolder; theme.themePrefab = themeboxPrefab; saveThemeList.Add(theme); } public class SaveManager : MonoBehaviour { public static SaveManager instance; public int ThemesCount; public GameObject themeboxPrefab; public Transform themeBoxHolder; private SaveTheme[] saveTheme; public List<SaveTheme> saveThemeList = new List<SaveTheme>();
  14. Hermetes

    Image entlang von Fillamount setzen

    Klasse hat funktioniert! Musste tatsächlich nur das transform.position ersetzen. Vielen vielen Dank! Ich fang schon mal an Schokoladen Tafeln zu stapeln!
  15. Hallo! Ich möchte am Ende meiner Healthbar ein Image setzen. Mein Problem ist aber, das sich das Image immer wieder auf Position (-674,-65) landet und nicht auf (-152,0) Falls die Info wichtig sein sollte, es positioniert sich auf der Bottom Linie meines Canvas. public Vector2 startPos; public Vector2 endPos; public Image healthRegeneration; // Das besagte Image void Start() { startPos = new Vector2(-152,0); endPos = new Vector2(152,0); healthRegeneration.transform.position = endPos; void Update() { float perc = _actuallHealth / _startingHealth; healthRegeneration.transform.position = Vector2.Lerp(startPos, endPos, perc); } Habe public Vector2 benutzt, da ich nicht weiß wie sonst.
×