Unity Schaden bekommen durch Kontakt?

2 Antworten

Die Kollisionsabfrage würdest du nicht mit if lösen. Wenn du eine Hitbox / einen Collider um deinen Charakter hast, realisiert dieser doch die auf ihn einprasselnden Events selbst und stellt eine entsprechende Methode zu Verfügung, die als Handler für so ein Event reagiert.

https://docs.unity3d.com/ScriptReference/Collider.OnCollisionEnter.html

Innerhalb dieses Colliders kannst du nochmals abfragen (dann mit if), ob das Objekt, dass mit dem Spieler-Collider kollidiert ist, der Gegner war. Wenn ja, ziehst du einen gewissen Satz an Lebensenergie ab.


ErzengelAriel 
Beitragsersteller
 05.05.2020, 00:39

Du meinst in deiner Antwort das ich es mit einer If-Abfrage nicht lösen würde. Also heißt das es geht schlecht/schwer damit oder geht das überhaupt nicht

regex9  05.05.2020, 03:36
@ErzengelAriel

Das würde bedeuten, dass du anfangen würdest, bereits bestehende Funktionalitäten neu zu entwickeln, was m.E. keinen Sinn macht.

ErzengelAriel 
Beitragsersteller
 02.05.2020, 01:56

Mit welchem Befehl lasse ich das Spiel beenden also das man stirbt?

regex9  02.05.2020, 07:12
@ErzengelAriel

In dem Fall würde ich doch eher die Szene neu laden (LoadScene). Um das noch etwas aufzuhübschen, kann man vorher noch einen Text (GUI.Label) einblenden und / oder irgendeinen kurzen Sound einspielen (PlayAudioClip). Damit dies noch für den Spieler auffassbar ist, sollte eine Verzögerung eingebaut werden (WaitForSeconds), bevor die Szene lädt.

Collider auf die Gegner und auf dich

Gegner brauchen nen Tag

Dann so irgendwie:

if(enemy.tag == "Enemy"){ //Im Collision Event
  player.DealDmg(10);
}

class Player{
  private int hp
  
  void DealDmg(int dmg){
    hp -= dmg;
    if(hp <= 0) //Verloren
  }
}

ErzengelAriel 
Beitragsersteller
 02.05.2020, 01:57

Kannst du mir sagen mit welchem Befehl ich das Spiel beende also man stirbt sozusagen?

codinghelp  02.05.2020, 01:59
@ErzengelAriel

Du willst doch bestimmt nicht das spi beenden... Geh vlt ins Hauptmenü oder nen endscreen. Also lad am besten ne neue szene

ErzengelAriel 
Beitragsersteller
 02.05.2020, 02:00
@codinghelp

Naja ich habe och weder Endscreen oder Hauptmenü :( Deswegen will ich temporär einfach das Spiel beenen

ErzengelAriel 
Beitragsersteller
 02.05.2020, 02:07
@codinghelp

Du ich weiß nicht ob ich grundlegend was falsch mache.. Ich habe nun   void Update()

  {

    if (Input.GetKeyDown(KeyCode.T))

    {

      TakeDamage(10);

    }

    if (currenthealth <= 0)

    {

      Application.Quit();

    }

  }

codinghelp  02.05.2020, 02:08
@ErzengelAriel

Musst schon dazu schreiben was das Problem ist...

Und in der update Funktion is es auch falsch, oder is es nur zum test?

ErzengelAriel 
Beitragsersteller
 02.05.2020, 02:09
@codinghelp

Also sobald meine Hp <= 0 passiert nichts... Was meinst du genau mit in der update Funktion ist das falsch? Ich dachte da muss das rein?

codinghelp  02.05.2020, 02:11
@ErzengelAriel

Das muss ins collision event rein...

Ich will ja nix sagen aber hast du überhaupt Bein bisschen ne Idee davon was du machst?

Hier würde dir jedes mal wenn du t drückst 10hp abgezogen.

Setz dir breakpoints und schau warum es nicht funktioniert

ErzengelAriel 
Beitragsersteller
 02.05.2020, 02:13
@codinghelp

Ich hab echt nicht viel Ahnung, die meisten meiner Scripte fürs Spiel sind abgeschrieben dann modefiziert oder mit anderen Scripts vermischt...

codinghelp  02.05.2020, 02:15
@ErzengelAriel

Merkt man. So wird das aber nichts. Haben deine Gegner und der Spieler denn überhaupt collider?

Weißt du was breakpoints sind und wie man sie verwendet? Wenn nein ist das erstmal dein nächster schritt

ErzengelAriel 
Beitragsersteller
 02.05.2020, 02:19
@codinghelp

Ich habe nun es so gemacht das jedesmal wenn ich T drücke ich Schaden kassiere, also mache ich dann das dort rein oder nicht? (Ist ja sozusagen die "Collision" oder nicht?

ErzengelAriel 
Beitragsersteller
 02.05.2020, 02:20
@codinghelp

Ja ich weiß was breakpoints sind, soweit bin ich schon xD. Ich versteh auch wie das Script funktioniert. Meine Gegner haben auch Collider, wie gesagt funktioniert alles außer jetzt noch die Collision und das sterben

codinghelp  02.05.2020, 02:20
@ErzengelAriel

Wenn du t drückst bekommst du Schäden. Das ist ja aber an sich nicht richtig. Es muss Immer noch ins collision event und wenn du meine Fragen nicht beantwortest kommen wir hier auch nicht weiter

codinghelp  02.05.2020, 02:21
@ErzengelAriel

Na also, dann mach nen breakpoint bei if(hp kleiner 0) hin

1. Ändert sich der Wert von current health nachdem du t drückst?

2. Kommst du dann irgendwann zu application. Quit?

ErzengelAriel 
Beitragsersteller
 02.05.2020, 02:42
@codinghelp

Ja es verändert seinen Wert wenn man T drückt aber sobald es unter 0 wird passiert nichts

ErzengelAriel 
Beitragsersteller
 02.05.2020, 02:55
@codinghelp

Bei mir ist das aber kein gelber Pfeil zu sehen, muss man den sehen?

ErzengelAriel 
Beitragsersteller
 02.05.2020, 02:59
@codinghelp

Also kommt der garnicht dahin oder was? Aber kann es sein das es daran liegt das es für Unity ist, außerdem besteht ja mein Spiel aus vielen Scripts

codinghelp  02.05.2020, 03:03
@ErzengelAriel

Ich versteh ehrlich gesagt dein Problem nicht. Es kann doch nicht so schwer sein nen breakpoint bei dem if(currenthealth <= 0) zu setzten. Mit f10 gehst du dann 2 Schritt weiter und schaust ob er zu application. Quit kommt oder net. Evtl mach nen conditional breakpoint draus

ErzengelAriel 
Beitragsersteller
 02.05.2020, 03:07
@codinghelp

Also ich erstelle ein Breakpoint, drücke dann auf Debuggen und es passier nichts außer das er sagt: Build: 1 erfolgreich oder aktuell, 0 fehlerhaft, 0 übersprungen und Das Programm "Unity" wurde mit Code 0 (0x0) beendet.