Jump to content
Unity Insider Forum

peachplayer

Members
  • Content Count

    155
  • Joined

  • Last visited

  • Days Won

    1

peachplayer last won the day on October 31 2016

peachplayer had the most liked content!

Community Reputation

4 Neutral

About peachplayer

  • Rank
    Advanced Member

Recent Profile Visitors

1,774 profile views
  1. danke für die Antwort! Hab den Fehler gefunden! Es lag an der Coroutine "BarGraph" bzw. wie diese aufgerufen wurde... Gruss, peachplayer
  2. IEnumerator BarGraph() { int i = 0; float offsetX = 0f; float offsetZ = 0f; float abstandX = 10f; float abstandZ = 15f; int x; // einfache Zaehlvariable int z; // einfache Zaehlvariable float newX; float newZ; i = 0; int k = 0; float total = 0; int index1 = dropdown1.value; pooledObjects = new List<GameObject>(); pooledObjects1 = new List<GameObject>(); pooledObjects2 = new List<GameObject>(); var parzellen1 = liste5.Where(c => c.Kultur == dropdown1.options[index1].text && c.Datum.Year == 2020); foreach (var parzelle in parzellen1) { UnityEngine.Debug.Log(parzelle.Parzellenname + parzelle.Fläche); total += parzelle.Fläche; for (z = 0; z < 10; z++) { for (x = 0; x < 12; x++) { k = z * 12 + x; newX = offsetX + i * 250 + x * abstandX; newZ = offsetZ + i * 0 + z * abstandZ; obs = (GameObject)Instantiate(prefabHaus[i], new Vector3(newX, 1f, newZ), Quaternion.identity); if (i == 0) { pooledObjects.Add(obs); Destroy(obs, 5); } else if (i == 1) { pooledObjects1.Add(obs); Destroy(obs, 8); } else if (i == 2) { pooledObjects2.Add(obs); Destroy(obs, 10); } } } i++; UnityEngine.Debug.Log("i =" + i); UnityEngine.Debug.Log("Anz Objekte in Liste =" + pooledObjects.Count); } totalAren.text = "Total Fläche (in Aren): " + total.ToString(); yield return null; } IEnumerator DestroyGraph() { int k; // einfache Zaehlvariable UnityEngine.Debug.Log("pooledObjects=" + pooledObjects.Count); for (k = 0; k < pooledObjects.Count; k++) { Destroy(pooledObjects[k]); Destroy(pooledObjects1[k]); Destroy(pooledObjects2[k]); } i++; UnityEngine.Debug.Log("i =" + k); UnityEngine.Debug.Log("Anz Objekte in Liste =" + pooledObjects.Count); UnityEngine.Debug.Log("z2 = " + i); UnityEngine.Debug.Log("pooledObjects2 =" + pooledObjects.Count); yield return null; } Habe die zu instanzierenden Prefabs in ein Array "gesplittet", d.h. jede Parzelle stellt ein separates Array dar. Jetzt kann gar keine Liste mehr gelöscht werden manuell mit der Funktion "DestroyGraph()". Da kann doch etwas nicht stimmen? Gruss, peachplayer
  3. der springende Punkt ist doch der, dass immer nur das zuletzt erstellte Feld reps. Parzelle gelöscht wird und diese Parzelle mit den entsprechenden GameObjekten kann auch gelöscht werden, während die restlichen Parzellen stehen bleiben.
  4. Hallo Leute Leider funktioniert es immer noch nicht mit dem löschen der instanzierten GameObjekte. Weiss jemand wie das geht? GameObject obj = (GameObject)Instantiate(ernten, new Vector3(newX, 1f, newZ), Quaternion.identity); pooledObjects.Add(obj); ... IEnumerator DestroyGraph() { int k; // einfache Zaehlvariable UnityEngine.Debug.Log("pooledObjects=" + pooledObjects.Count); for (k = 0; k < pooledObjects.Count; k++) { Destroy(pooledObjects[k]); } yield return null; } Leider wird immer nur die zuletz erstelle Parzelle gelöscht. Wo steckt hier der Fehler? Gruss, Peachplayer
  5. Hallo Leute Weiss jemand, wie man einen selbstfahrenden Mähdrescher programmiert, der ein zuvor erstelltes Feld aberntet. Geht das ev. mit dem Nav Mesh Agent? Wie kann man die Koordinaten der Pflanzen an den Nav Mesh Agent weitergeben? for (z = 0; z < 10; z++) { for (x = 0; x < 12; x++) { k = z * 12 + x; newX = offsetX + i * 250 + x * abstandX; newZ = offsetZ + i * 0 + z * abstandZ; GameObject obj = (GameObject)Instantiate(prefabHaus[i], new Vector3(newX, 1f, newZ), Quaternion.identity); obj.SetActive(true); pooledObjects.Add(obj); UnityEngine.Debug.Log(parzelle.Parzname + parzelle.Fläche); } } i++; UnityEngine.Debug.Log("i =" + i); } Mit dem obigen Code wird das Feld mit den Pflanzen erstellt! Gruss, peachplayer
  6. Danke für die Antwort! Leider hatte ich mit der obigen Code-Variante keinen Erfolg! Musste die Objekt-Pooling Methode verwenden, dann klappte es! D.h. die Gameobjects zuerst in einer separaten Liste zwischen-speichern. Sonst wird immer nur das zuletzt erstellte Feld gelöscht. Gruss, peachplayer
  7. Hallo Leute Weiss jemand wie man zuvor erstellte Gameobjekte nachdem sie angezeigt werden wieder löschen kann? Gruss, peachplayer public GameObject[] field = new GameObject[120]; ... ...Code wo die Gameobjekte instanziert werden... ... obs = field; foreach (GameObject ob in obs) { Destroy(ob); }
  8. IEnumerator BarGraph(List<GraphData> gd) { float gap = 1; // X axis starts from 0 to 4 so according to my logic i have to check if no. of data // is > 4 than we should divide the lenght of x axis with the data count, this will // give us the gap between bars that we need to keep. if (gd.Count > 4) { gap = 30.0f / gd.Count; } float xIncrement = gap; int dataCount = 0; Vector3 startpoint = Vector3.zero; while (dataCount < gd.Count) { int i = dataCount; Vector3 endpoint = new Vector3(xIncrement, gd[dataCount].income, 0.96f); startpoint = new Vector3(endpoint.x, 0, 0.96f); // pointer is an empty gameObject, i made a prefab of it and attach it in the inspector GameObject p = Instantiate(pointer, new Vector3(startpoint.x, startpoint.y, 0.97f), Quaternion.identity) as GameObject; p.transform.parent = holder.transform; // linerenderer is an empty gameObject with Line Renderer Component Attach to it, // i made a prefab of it and attach it in the inspector GameObject test1 = Instantiate(linerenderer, transform.position, Quaternion.identity) as GameObject; test1.transform.parent = holder.transform; test1.name = dataCount.ToString(); LineRenderer lineRenderer = test1.GetComponent<LineRenderer>(); lineRenderer.material = mat; lineRenderer.SetWidth(0.30F, 0.30F); lineRenderer.SetVertexCount(2); while (p.transform.position.y < endpoint.y) { p.transform.Translate(Vector3.up * Time.deltaTime * 8, Space.World); lineRenderer.SetPosition(0, startpoint); lineRenderer.SetPosition(1, p.transform.position); yield return null; } lineRenderer.SetPosition(0, startpoint); lineRenderer.SetPosition(1, endpoint); p.transform.position = endpoint; var parzellen2 = gd.GroupBy(item => item.Parzname); foreach (var parzelle1 in parzellen2) { addScoreText.text = parzelle1.Key; addScoreText.transform.position = Camera.main.WorldToScreenPoint(lineRenderer.transform.position); } startpoint = endpoint; dataCount++; xIncrement += gap; yield return null; } } und so sieht die ganze Coroutine aus, welche die Balkendiagramme zeichnen sollte. Leider erscheint noch kein Beschriftungs-text. Gruss, peachplayer
  9. danke für den Tipp. Auf welches Objekt bezieht sich dann transform.position? Gruss, peachplayer
  10. Hallo Leute ich möchte eine Art Balkendiagramm mit Unity erstellen. Die rechteckigen Balken habe ich grafisch schon hingekriegt, jedoch fehlen mir jetzt noch die Beschriftungen für die zugehörigen Werte. Weiss jemand wie man einen Text an ein GameObjekt binden kann? Habs mit folgender Funktion probiert: GameObject CreateText(LineRenderer canvas_transform, float x, float y, string text_to_print) { GameObject UItextGO = new GameObject("Text2"); RectTransform trans = UItextGO.AddComponent<RectTransform>(); trans.anchoredPosition = new Vector2(x, y); Text text = UItextGO.AddComponent<Text>(); text.text = text_to_print; return UItextGO; } Gruss, peachplayer
  11. Hallo Also ich habe sehr gute Erfahrungen mit dem Speicherformat .XML gemacht. Die gespeicherten Daten können beliebig editiert werden. Die Datenabfrage funktioniert dann via Linq. Gruss, peachplayer
  12. Ich konnte das Problem selber lösen! Ich musste bloss die obige Funktion in die "Anzeige"-Funktion integrieren, denn da wird ja jedesmal der Index neu gesetzt, sonst bleibt er immer gleich! Gruss, peachplayer
  13. Hallo Leute Ich habe folgendes Problem: wenn ich den Index des Dropdown-Objektes abfragen will (index3), kommt immer nur der 0-te Wert heraus, sodass immer nur das 1.Element des Dropdown-Feldes heraus kommt. Woran könnte das liegen? Die Index-Werte sollten doch auch dynamisch abgefragt werden können? void ListeFuellen() { //get the selected index int index3 = dropdown3.GetComponent<Dropdown>().value; float Menge; dataXml = XElement.Load(".\\Dünger.xml"); IEnumerable<XElement> data = dataXml.Elements(); foreach (XElement item in data) { if ((float)item.Element("Fläche") != 0) { Debug.Log(item.Element("Parzellenname").Value); Debug.Log(item.Element("Menge").Value); Debug.Log(item.Element("Düngersorte").Value); // Code der pro Parzellenname ausgeführt wird // parzelle enthält alle Einträge der jeweiligen Parzelle string Düngersorte = item.Element("Düngersorte").Value; Debug.Log(Düngersorte); Menge = (float)item.Element("Menge"); Debug.Log(Menge); Parzellenname = item.Element("Parzellenname").Value; String value = item.Element("Datum").Value; int startIndex = 0; int length = 4; String substring = value.Substring(startIndex, length); switch (Düngersorte) { case "Ammonsalpeter": N = 27.0f * Menge * 0.01f; P = 0.0f * Menge * 0.01f; K = 0.0f * Menge * 0.01f; Mg = 2.50f * Menge * 0.01f; break; case "Ceral": N = 0.0f * Menge * 0.01f; P = 16.0f * Menge * 0.01f; K = 32.0f * Menge * 0.01f; Mg = 0.0f * Menge * 0.01f; break; case "Suplesan": N = 20.0f * Menge * 0.01f; P = 8.0f * Menge * 0.01f; K = 8.0f * Menge * 0.01f; Mg = 02.0f * Menge * 0.01f; break; case "Vernal plus": N = 20.0f * Menge * 0.01f; P = 6.0f * Menge * 0.01f; K = 6.0f * Menge * 0.01f; Mg = 02.0f * Menge * 0.01f; break; } DüngerEintrag_NPK eintrag1 = new DüngerEintrag_NPK(); eintrag1.N = N; eintrag1.P = P; eintrag1.K = K; eintrag1.Mg = Mg; eintrag1.Parzellenname = Parzellenname; eintrag1.Datum = DateTime.Parse(value); if (substring == dropdown3.options[index3].text) liste1.Add(eintrag1); } } }
  14. danke für die ausführliche Antwort. Der Fehler lag tatsächlich in einem anderen Script. Jetzt läuft eigentlich alles. Gruss, peachplayer
×
×
  • Create New...