Fernkampf

Thursday, November 21, 2013

Fernkampf

In meinem Game soll es möglich sein, den Gegner mit einer Fernkampfattacke zu anzugreifen. Das soll jedoch recht schwierig sein, sodass der Fernkampf in Kombination mit Items wie z.B. der Mine eine höhere Trefferquote hat.


Das heißt, dass die Fernkampfattacke eine Spawnzeit benötigt um den Fernkämpfer eine kurze Zeit bewegungsunfähig zu machen. Somit ist gewährleistet, dass man nicht unendlich viele Male hintereinander schießen kann und der Gegner keine Chance mehr hat zu entkommen.
Sobald die Spawnzeit um ist, fliegt das gespawnte Item los. Bei einer Kollision mit einem anderen Objekt wird das Fernkampfitem zerstört. Falls das getroffene Objekt der Gegner oder man selbst war, werden Lebenspunkte abgezogen und die Bewegungsunfähigkeit tritt ein. Man benötigt demnach eine kurze Erholzeit.

Fernkampfitems

Wenn man den Fernkampf mit Items, welche zufällig im Spiel spawnen, kombiniert hat man also eine höhere Trefferwahrscheinlichkeit und man muss taktisch vorgehen:
Der Gegner kann dem Fernkampf relativ leicht während der Spawnzeit entkommen, also muss ich entweder darauf warten, dass er in eine Mine tritt, oder ihn zuvor mit einer Bombe oder einem Boxhandschuh außer Gefecht setzen. Danach trifft die Fernkampfattacke mit höherer Wahrscheinlichkeit, da mein Gegner während der Spawnzeit noch benommen ist und nicht weglaufen kann.

(Welche Items es geben wird und wie sie Funktionieren, werde ich in den kommenden Posts beschreiben.)

Nun aber noch zur Programmierung des Fernkampfes:


Sobald ein Spieler die Fernkampftaste drückt, wird ein Objekt instanziiert:

if(Input.GetKeyDown(KeyCode.Keypad1))
{
    fernkampfObject = uLink.Network.Instantiate(
        fernkampfPrefab, 
        new Vector3(RPCTest.clickedPlayer.transform.position.x-10,
        RPCTest.clickedPlayer.transform.position.y,
        RPCTest.clickedPlayer.transform.position.z), 
        transform.rotation, 0
    );
}

Danach wird die Flugrichtung festgestellt indem geprüft wird in welche Richtung der Character schaut. Zum Schluss wird das Objekt mit transform.translate  in diese Richtung fortbewegt.

if(startFernkampf==true)
{
    if(RPCTest.flugRichtungLinks==false)
    {
      transform.Translate(Vector3.right *30*Time.smoothDeltaTime);
    }
    if(RPCTest.flugRichtungLinks==true)
    {
      transform.Translate(-Vector3.right *30*Time.smoothDeltaTime);   
    } 
}

Das Fernkampfobjekt hat zusätzlich ein Unterobjekt für die Texturen, genau wie die Playerobjekte auch. Auf diesem wird das gleiche Skript wie das für die Characteranimationen, welches in diesem Post zu finden ist, benutzt.

No comments:

Post a Comment