Willy_Wonder Geschrieben 17. Mai 2017 Melden Share Geschrieben 17. Mai 2017 Moin, ihr Lieben! disclaimer: * (das hier ist die Fortsezung meiner Legende über Zustände und Anlagen :D) * ich bin mit meinem Latein am Ende ich muss jetzt die csv datei durch eine sql datenbank ersetzen. ich habe alles zusammengesucht, eine DB erstellt und einen Script geschrieben, wo diese ausgelesen wird. sieht ganz gut aus, debug.log zeigt mir auch das an, was ich sehen möchte nun zum eigentlichen Problem: wie kann ich nun meine Objekte den Namen in der SQL DB zuordnen? so, dass unity erkennt, welche Objekte vorhanden sind und dann die if funktion ausführt? oO mein skript sieht gerade so aus: using System.Collections; using System.Collections.Generic; using UnityEngine; using Mono.Data.Sqlite; using System; using System.Data; public class ZustaendeNEU : MonoBehaviour { private string connectionString; public List<string> MeineObjekte; public GameObject[] myObjects; public List<int> MeineZustaende; void Start () { connectionString = "URI=file:" + Application.dataPath + "/Anlagen.sqlite"; GetZustaende (); } private void GetZustaende () { MeineObjekte = new List<string>(); MeineZustaende = new List<int>(); using (IDbConnection dbConnection = new SqliteConnection (connectionString)) { dbConnection.Open (); using (IDbCommand dbCmd = dbConnection.CreateCommand ()) { string sqlQuery = "SELECT * FROM Zustandstabelle"; dbCmd.CommandText = sqlQuery; using (IDataReader reader = dbCmd.ExecuteReader ()) { while (reader.Read ()) { MeineZustaende.Add (reader.GetInt32 (2)); MeineObjekte.Add (reader.GetString (1)); //Debug.Log (reader.GetString (1) + " - " + reader.GetInt32 (2)); } dbConnection.Close (); reader.Close (); } } } //BIS HIER ALLES RICHTIG! GameObject aktuellesObjekt; foreach (string Indikator in MeineObjekte) { aktuellesObjekt = FindObject(Indikator); foreach (int Zustand in MeineZustaende) { if (Zustand == 0) { aktuellesObjekt.GetComponent<Renderer>().materials [0].color = Color.green; aktuellesObjekt.AddComponent<ButtonIO> (); } else if (Zustand == 1) { aktuellesObjekt.GetComponent<Renderer>().materials [0].color = Color.blue; aktuellesObjekt.AddComponent<ButtonWartung> (); } else { aktuellesObjekt.GetComponent<Renderer>().materials [0].color = Color.red; aktuellesObjekt.AddComponent<ButtonAlarm> (); } } } } private GameObject FindObject(string IndikatorName) { GameObject foundObject = null; foreach (GameObject Indikator in myObjects) { if (Indikator.name == IndikatorName) { foundObject = Indikator; } } return foundObject; } } so wie es gerade ausieht, schmeißt unity meinen skript nur auf Cube(1), denn alle 6 Buttons erscheinen an derselben Position ._. vieln dank im voraus! Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Mabenan Geschrieben 17. Mai 2017 Melden Share Geschrieben 17. Mai 2017 du solltest deine geschachtelte foreach schleife durch eine for schleife über die anzahl der einträge in deiner liste laufen lassen.Mit dem counter der for schleife greifst du dann auf beide Listen zu damit bekommst du die richtige Zuordnung. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Willy_Wonder Geschrieben 17. Mai 2017 Autor Melden Share Geschrieben 17. Mai 2017 vor 48 Minuten schrieb Mabenan: du solltest deine geschachtelte foreach schleife durch eine for schleife über die anzahl der einträge in deiner liste laufen lassen.Mit dem counter der for schleife greifst du dann auf beide Listen zu damit bekommst du die richtige Zuordnung. wäre die logik dahinter richtig? for (int Zustand = 0; Zustand <=2; Zustand ++) { if (Zustand == 0) { aktuellesObjekt.GetComponent<Renderer>().materials [0].color = Color.green; aktuellesObjekt.AddComponent<ButtonIO> (); } else if (Zustand == 1) { aktuellesObjekt.GetComponent<Renderer>().materials [0].color = Color.blue; aktuellesObjekt.AddComponent<ButtonWartung> (); } else { aktuellesObjekt.GetComponent<Renderer>().materials [0].color = Color.red; aktuellesObjekt.AddComponent<ButtonAlarm> (); } } funktioniert jedenfalls nicht... hab jetzt allerdings jeweils 1x den button auf derselbem Objekt. ich befürchte, dass diese geschichte mit "FindObject" nicht ganz sauber läuft Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Mabenan Geschrieben 17. Mai 2017 Melden Share Geschrieben 17. Mai 2017 for(int i = 0; i < MeineObjekte.Count; i++) { aktuellesObjekt = FindObject(MeineObjekte[i]); int Zustand = MeineZustaende[i]; if (Zustand == 0) { aktuellesObjekt.GetComponent<Renderer>().materials [0].color = Color.green; aktuellesObjekt.AddComponent<ButtonIO> (); } else if (Zustand == 1) { aktuellesObjekt.GetComponent<Renderer>().materials [0].color = Color.blue; aktuellesObjekt.AddComponent<ButtonWartung> (); } else { aktuellesObjekt.GetComponent<Renderer>().materials [0].color = Color.red; aktuellesObjekt.AddComponent<ButtonAlarm> (); } } } so meinte ich dass Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Willy_Wonder Geschrieben 17. Mai 2017 Autor Melden Share Geschrieben 17. Mai 2017 vor 2 Minuten schrieb Mabenan: for(int i = 0; i < MeineObjekte.Count; i++) { aktuellesObjekt = FindObject(MeineObjekte[i]); int Zustand = MeineZustaende[i]; if (Zustand == 0) { aktuellesObjekt.GetComponent<Renderer>().materials [0].color = Color.green; aktuellesObjekt.AddComponent<ButtonIO> (); } else if (Zustand == 1) { aktuellesObjekt.GetComponent<Renderer>().materials [0].color = Color.blue; aktuellesObjekt.AddComponent<ButtonWartung> (); } else { aktuellesObjekt.GetComponent<Renderer>().materials [0].color = Color.red; aktuellesObjekt.AddComponent<ButtonAlarm> (); } } } so meinte ich dass okay, gerade ausprobiert - jetzt nimmt er den 1. cube und ordnet da auch den richtigen Button und Zustand (mit Farbe) zu. Allerdings scheint er die restlichen Cubes nicht zu erkennen Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Willy_Wonder Geschrieben 17. Mai 2017 Autor Melden Share Geschrieben 17. Mai 2017 ich schätze mal, die Funktion FindObjekt wird nicht richtg ausgeführt. im skript habe ich ja MeineObjekte (das ist die Indikatorspalte in meiner SQL DB), MeineZustaende (die Spalte Zustand in der SQL DB) und myObjects, wo ich dann manuell meine GameObjects hinzufüge. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Willy_Wonder Geschrieben 18. Mai 2017 Autor Melden Share Geschrieben 18. Mai 2017 kann ich MeineObjekte iwie den myObjects zuordnen? Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Recommended Posts
Archiviert
Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.