Jump to content
Unity Insider Forum

Treffer nur zählen wenn Taste zum schlagen gedrückt wurde


FluuuxTechBlog

Recommended Posts

Hallo,

 

ich habe meinem Enemy ein Script zugewiesen das erkennen soll ob sein Collider von einem Collider des Players getroffen wurde. Wenn das so ist dann soll der Trefferzähler hochgezählt werden.

 

Leider ist das nicht ganz das was ich will da der Collider ja auch erkannt wird wenn mein Player nur so den Feind berührt.

 

Wie kann ich es realisieren dass der treffer nur gezählt wird wenn mein Player auch geschlagen oder getreten hat?

 

Danke

Link zu diesem Kommentar
Auf anderen Seiten teilen

Daran dachte ich auch schon, das Problem ist. Das script das ich dem Player übergeben habe der schlagen soll, ist ein javascript und das script das ich dem Feind übergeben habe der getroffen werden soll ist ein c+ script.

 

Wie kann ich denn aus dem c# script auf eine Variable des javascripts zugreifen?

ich habe es versucht mit scriptname.variablenname so wie man es zwischen javascripts macht, was aber nicht funktioniert hat.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Scriptname.variablenname geht nur mit statischen Variablen, und dasist hier, glaube ich, nicht der richtige Fall für eine statische Variable.

Du hast doch in deinen OnCollision...-Events einen optionalen Parameter com Typ Collision.

Nutze ihn, um herauszufinden, welches Objekt du getroffen hast:

void OnCollisionEnter(Collision info)
{
   HitScript hitScript = info.collider.GetComponent<HitScript>();
if(hitScript != null) //wenn die Komponente auch wirklich da ist (und nicht null)
{
	hitScript.Hit();
}
}

Link zu diesem Kommentar
Auf anderen Seiten teilen

Kannst Du mir mal erklären was die erste Zeile tut?

Und könntest Du mir das mal für c# umstellen? Ich fange damit gerade erst an.

 

Ich habe im C# also im Script des Gegners das OnCollisionEnter und ich frage ja die Collision ab.

Das ist mein code

//Treffer erkennen
void OnCollisionEnter (Collision hit)
{
 if (hit.gameObject.tag == "PlayerFaust")
 {
   FaustTreffer++;
   if (FaustTreffer >= maxTreffer)
   {
  Destroy (gameObject);
   }
   Debug.Log ("Treffer mit der Hand");
 }
}

 

Also ich frage ab ob mein Player den Feind mit dem FaustCollider getroffen hat.

Dieser soll aber nur dann auslösen wenn ich auch auf den Gegner einschlage und nicht auch dann wenn ich nur am Gegner vorbei gehe und diesen mit diesem Collider berühre ohne dass ich die Taste zum schlagen nutze.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich würde das ja nicht über Kollisionsevents lösen...

Schau dir ion der Reference mal ein paar Physics-Methoden an, so wie Physics.CheckSphere().

Damit kannst du prüfen, ob sich zum momentanen Zeitpunkt irgendwas in einer Kugel (/Kapsel/...) befindet.

Ein Trigger für einen Frame quasi.

Einfach vor dem Spieler abfragen und wenn was drin steckt, mit dem Objekt arbeiten.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Nö, lass die PlayerFaust weg.

Einfach in dem Moment, wo die Maustaste gedrückt wird, abfragen, ob vor der Figur ein Gegner ist.

Wenn ja, dem was abziehen.

Das über die tatsächliche Position der Faust zu machen ist etwas übertrieben ... den Unterschied merkt der Spieler sowieso nicht.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hm, geht das so einfach?

Normalerweise nehme ich ein Script was ich allen Gegnern geben kann und lasse das die treffer zählen und die Energie hoch oder runter zählen. Wenn ich das jetzt den Player selber machen lasse, funktioniert dass dann so einfach dass ich die Energie auch dem richtigen Gegner abziehen kann?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Das ist ja der Witz daran, wenn du keine statischen Variablen nimmst.

In dem Parameter von OnCollisionEnter steht ja ein Collider drin und Physics.OverlapSphere gibt auch ein Array von Collidern zurück.

Diese Collider sind genau die Collider-Komponenten der Objekte, die getroffen werden.

Du hast dann Referenzen auf diese Objekte, kannst sie fragen, ob die GameObjects davon dein HitScript haben (GetComponent) und dann mit der HitScript-Komponente weiter arbeiten.

 

Kurz: Diese Collider sind die "richtigen" Gegner, die du suchst.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

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

×
×
  • Neu erstellen...