Zerbo93 Geschrieben 22. Juni 2021 Melden Share Geschrieben 22. Juni 2021 Hallo, ich stehe mal wieder vor einem Problem, und brauche eure Hilfe. Ich habe vor, über ein Gameobjekt(Bulldozer), ein anderes Gameobjekt(Gebäude) zu löschen. Sprich wenn der Bulldozer mit einem Objekt kollidiert, dass den Tag "Building" hat und man dann die linke Maustaste drückt, soll das Gebäude, und die Einträge zum Gebäude aus der txt-Datei, gelöscht werden. Momentan löscht sich das Bulldozer-Objekt aber nur selbst. Und das auch nicht jedes mal, sondern erst nach einigen Versuchen. Hier das Script(C#) zum Bulldozer: using System; using UnityEngine; using System.IO; public class BulldozerScript : MonoBehaviour { private uint id; private string Sid; private void OnCollisionStay(Collision collision) { if (collision.gameObject.tag == "Building" && Input.GetMouseButtonDown(0)) { Debug.Log("Hallo!"); if (gameObject.GetComponent<HuasScript>() != null) { id = gameObject.GetComponent<HuasScript>().GebäudeId; } else if (gameObject.GetComponent<FarmScript>() != null) { id = gameObject.GetComponent<FarmScript>().GebäudeId; } else if (gameObject.GetComponent<FabrikScript>() != null) { id = gameObject.GetComponent<FabrikScript>().GebäudeId; } else if (gameObject.GetComponent<HolzfaellerScript>() != null) { id = gameObject.GetComponent<HolzfaellerScript>().GebäudeId; } else if (gameObject.GetComponent<RoadScript>() != null) { id = gameObject.GetComponent<RoadScript>().GebäudeId; } else if (gameObject.GetComponent<SaegewerkScript>() != null) { id = gameObject.GetComponent<SaegewerkScript>().GebäudeId; } Sid = Convert.ToString(id); string[] lines = File.ReadAllLines("Temp.txt"); StreamWriter writer = new StreamWriter("Temp.txt", true); for (int i = 0; i < lines.Length; i++) { if(lines[i] == Sid) { int y = i + 6; string leeren = null; while(i <= y) { writer.WriteLine(lines[i], leeren); i++; } break; } } writer.Close(); Destroy(gameObject); } } } Anbei ein Screenshot, zum besseren Verständnis, was ich mit dem Bulldozer-Objekt meine. Das Objekt folgt stets der Maus. Schonmal danke für eure Hilfe im voraus! Edit 1: Er geht in die if-Abfrage "collision.gameObject.tag == "Building" && Input.GetMouseButtonDown(0)" rein. Daher erkennt er auf jeden fall, dass er über einem Gebäude steht. Der Bulldozer selber hat keinen Tag. Nur die Gebäude, mit denen er kollidiert! Edit 2: Das Script liegt natürlich direkt auf dem Bulldozer-Objekt. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 22. Juni 2021 Melden Share Geschrieben 22. Juni 2021 Moin! gameObject referenziert das GameObject, auf dem diese Komponente sitzt. Wenn du das GameObject löschen willst, mit dem kollidiert wurde, musst du auch collision.gameObject zerstören. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
MaZy Geschrieben 23. Juni 2021 Melden Share Geschrieben 23. Juni 2021 Moin ein Tipp zu der if abfrage. Du kannst das optimieren in dem du das so machst: if (collision.gameObject.TryGetComponent<HuasScript>(out HuasScript huasScript)) { id = huasScript.GebäudeId; } else if (collision.gameObject.TryGetComponent<FarmScript>(out FarmScript farmScript) { id = farmScript.GebäudeId; } Viel bessere wäre übrigens, dass du ein extra Component hast die Basics hat. Beispiel wäre ein Component namens BuildingData oder BuildingInfo passend und mit den Daten wie die ID oder so. Nun musst du EINMAL if (collision.gameObject.TryGetComponent<BuildingData>(out BuildingData buildingData)) { id = buildingData.GebäudeId; } abfragen und schon ersparst du die ganzen if abfragen. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Zerbo93 Geschrieben 23. Juni 2021 Autor Melden Share Geschrieben 23. Juni 2021 vor 22 Stunden schrieb Sascha: Moin! gameObject referenziert das GameObject, auf dem diese Komponente sitzt. Wenn du das GameObject löschen willst, mit dem kollidiert wurde, musst du auch collision.gameObject zerstören. Danke! Hat funktioniert Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Zerbo93 Geschrieben 23. Juni 2021 Autor Melden Share Geschrieben 23. Juni 2021 vor 58 Minuten schrieb MaZy: Moin ein Tipp zu der if abfrage. Du kannst das optimieren in dem du das so machst: if (collision.gameObject.TryGetComponent<HuasScript>(out HuasScript huasScript)) { id = huasScript.GebäudeId; } else if (collision.gameObject.TryGetComponent<FarmScript>(out FarmScript farmScript) { id = farmScript.GebäudeId; } Viel bessere wäre übrigens, dass du ein extra Component hast die Basics hat. Beispiel wäre ein Component namens BuildingData oder BuildingInfo passend und mit den Daten wie die ID oder so. Nun musst du EINMAL if (collision.gameObject.TryGetComponent<BuildingData>(out BuildingData buildingData)) { id = buildingData.GebäudeId; } abfragen und schon ersparst du die ganzen if abfragen. Werde ich mal entsprechend abändern. Danke! 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.