Jump to content
Unity Insider Forum

TriggerInside?


Zara

Recommended Posts

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

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

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

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

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

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

Archiviert

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

×
×
  • Neu erstellen...