Jump to content
Unity Insider Forum

Hermetes

Members
  • Content Count

    168
  • 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,192 profile views
  1. Genau das! Und am besten die Information herausholen wann der Agent aufhört sich zu drehen, zwecks der Animation. Ich suche allgemein mehr Infos im Gebiet Rotation, kann das im Scripting API gar nicht so richtig finden.
  2. Es geht um ein Pferd, das die Animation bekommen soll. Wenn z.B. die distance < 3 ist, dann soll es rückwärts laufen. Links- sowie Rechtsdrehung Animation für Mausposition left, right. Für die Drehung müsste ich eher an Rigidbody.velocitiy ran, oder? Für das rückwärtslaufen jedoch wäre das WorldToScreenPoint genau das richtige, denke ich.
  3. Herzlichen Dank für das scripten Sascha! Habe es auch gleich ausprobiert. Und vergessen zu erwähnen, das es sich ja um ein selbst rotierendes Object handelt. Es ist ein NavMesh Agent. Jetzt müsste ich hier: Camera.main.WorldToScreenPoint(target.position) wohl noch sowas wie direction.forward (aus der Luft gegriffen) anbringen.
  4. Ich möchte die Richtung feststellen ob der Maus Click left,right,forward,back , von einem Object ausgehend, erfolgte. Gibt es dafür eine Methode oder muss man das mathematisch berechnen?
  5. Du kannst ein Sprite im Canvas verwenden. Stichwort : Indicator Waypoint Marker | Unity https://www.youtube.com/watch?v=oBkfujKPZw8&t=3s
  6. 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.
  7. 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 ?
  8. 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.
  9. 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!
  10. 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; }
  11. 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; } }
  12. 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(); } }
  13. 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)
  14. 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"); }
  15. 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"); }
×
×
  • Create New...