Zara Geschrieben 15. Mai 2017 Melden Share Geschrieben 15. Mai 2017 Hallo zusammen, Ich habe vor, eine Insel mit ai-npc zu erstellen. Die ai-npc kann man platt machen und wenn alle besiegt sind soll eine Nachricht erscheinen, aber das ist nebensächlich. Überlegt hatte ich, einen cube collider als trigger auf die Insel zu setzen, die ai bekommt einen Tag, zb NPC. Wenn alle ai im trigger weg sind, kommt besagte Nachricht oder was auch immer. Dafür brauche ich natürlich ein Script und ich habe das hier bei den snippets gefunden, wäre das der richtige Ansatz für mein Vorhaben? Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 15. Mai 2017 Melden Share Geschrieben 15. Mai 2017 Es ist ja nicht in jedem Frame interessant, welche oder wie viele davon noch leben, sondern nur dann, wenn es weniger werden. Einen Teil meines alten Skripts könnte man also zumindest inhaltlich wiederverwenden, aber nicht alles. Aber mal eine Frage: Wieso genau der Trigger? Was passiert mit Gegnern, die den Trigger verlassen anstatt zu sterben? Ich habe das Gefühl, dass das gar nicht vorgesehen ist. Wenn nämlich die Position der NPCs irrelevant ist, dann brauchst du gar keinen Trigger. In diesem Fall reicht eine statische Sammlung: using UnityEngine; using System.Collections.Generic; class Klassenname : MonoBehaviour { //Sammlung mit Referenzen auf alle Objekte dieses Typs private static HashSet<Klassenname> instances = new HashSet<Klassenname>(); // Beim Spawnen eintragen void Awake() { instances.Add(this); } //Bei Zerstörung austragen void OnDestroy() { instances.Remove(this); CheckWinningCondition(); } //Nachschauen, ob keine mehr übrig sind private static void CheckWinningCondition() { if(instances.Count == 0) { Debug.Log("Everyone is dead!"); } } } Dieses Script wäre dann auf dem NPC-Prefab drauf. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Zara Geschrieben 15. Mai 2017 Autor Melden Share Geschrieben 15. Mai 2017 Die NPC sind ja auf einer Insel und der trigger-collider ist groß genug um die Insel komplett zu umschließen. Ich bin kein Programmierer, deswegen fällt die Planung solcher Ideen immer merkwürdiger Ergebnisse zum Opfer Letztendlich will ich das der collider-trigger erkennt, ob die zone keine NPC mehr beinhaltet und dann neben einer Nachricht an alle spieler, soll ein timer ablaufen und nach dem sollen neue npc spawnen. Ich hoffe ich habe erklärt was ich meine Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 15. Mai 2017 Melden Share Geschrieben 15. Mai 2017 Jo, dann ist der Trigger überflüssig, denn er ist dafür da, zu schauen, ob Dinge in einem bestimmten Volumen sind. Um zu tracken, ob überhaupt Dinge existieren, brauchst du die Physik-Engine nicht - dafür reicht mein Code weiter oben. Edit: Habe mal Kommentare hinzugefügt, die vielleicht hilfreich sind. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Zara Geschrieben 15. Mai 2017 Autor Melden Share Geschrieben 15. Mai 2017 Super danke, jetzt verstehe ich dein script richtig. Und du hast mich überzeugt. Denn wenn ich das richtig verstehe hätte ich mich mit meiner Variante auch immer auf einen fixen bereich, nämlich dem collider-trigger, beschränkt. Mit deinem script bin ich viel flexibler. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 15. Mai 2017 Melden Share Geschrieben 15. Mai 2017 So isses! Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Zara Geschrieben 15. Mai 2017 Autor Melden Share Geschrieben 15. Mai 2017 Moha.... ich mags garnicht sagen aber ich bekomme einen Fehler bei deinem Script und da ich keine Ahnung habe, kann ich es nicht selber Lösen, auch nicht mit google. Das ist wohl etwas, wo ich mich mal genauer reinlesen sollte, da ich öffters diesen Fehler habe (hab Klassenname stumpf in NpcKill geändert) Assets/Costum Scripts/NpcKill.cs(25,6): error CS0120: An object reference is required to access non-static member `NpcKill.instances' Aufjedenfall nocheinmal ein dickes DANKE für deine hilfe, ich hätte sonst noch tagelang eine Lösung überlegt und wie ich das ganze am besten umsetze. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 15. Mai 2017 Melden Share Geschrieben 15. Mai 2017 Huch... ich hab oben das static vergessen. Mein Fehler! private static HashSet<Klassenname> instances = new HashSet<Klassenname>(); Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Zara Geschrieben 16. Mai 2017 Autor Melden Share Geschrieben 16. Mai 2017 Das wars schon? Ärgert mich, das ich soetwas nicht selbst lösen kann.... Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 16. Mai 2017 Melden Share Geschrieben 16. Mai 2017 Das kommt mit der Zeit, keine Sorge. Immer am Ball bleiben! 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.