Jump to content
Unity Insider Forum
Sign in to follow this  
Zara

TriggerInside?

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? 

 

Share this post


Link to post
Share on other sites

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.

  • Like 2

Share this post


Link to post
Share on other sites

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 ;)

 

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites

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. 

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites

Huch... ich hab oben das static vergessen. Mein Fehler!

private static HashSet<Klassenname> instances = new HashSet<Klassenname>();

 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
Sign in to follow this  

×
×
  • Create New...