Jump to content
Unity Insider Forum

SQLite auslesen


Willy_Wonder

Recommended Posts

Moin, ihr Lieben! disclaimer: * (das hier ist die Fortsezung meiner Legende über Zustände und Anlagen :D) *

ich bin mit meinem Latein am Ende :o

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 :D

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

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 :o

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

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 :o

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.

×
×
  • Neu erstellen...