Die Wasserbombe

Friday, January 17, 2014

Die Wasserbombe

Die Wasserbombe ist ein weiteres Item aus meinem Spiel und sie funktioniert folgendermaßen:


Beim Betätigen der Aktionstaste, wird die Bombe geworfen. Hierbei bewegt sie sich mit einer festgelegten Kraft in Sichtrichtung. Bei einem Zusammenprall mit einem Objekt mit dem Tag "Player" wird sie explodieren und Schaden hinzufügen. Auch das eigene Objekt kann also, wenn man sich unvorteilhaft anstellt, getroffen werden. Somit wirkt sie ähnlich wie der Ferkampf, nur eben schneller. Zudem hat sie eine kürzere Reichweite.


Jedes Item hat einen speziellen Tag, worüber sie auch auseinander gehalten werden. Läuft also ein Spieler durch ein instanziiertes Item mit dem Tag „Bombe“, erhält er die Bombe in Form einer Variable. Danach wird über diesem Spieler das Icon für „Wasserbombe“ erscheinen. Anschließend wird, je nach dem an welcher Stelle das Item aufgenommen wurde, die entsprechende Variable auf false gesetzt, sodass hier wieder ein neues instanziiert werden kann:

if(other.tag=="Bombe")
{  
    objectToDestroy=other.gameObject;
    if(networkView.isMine)
    {
        if(bombeMe==false&&boxhandschuhMe==false&&schnelligkeitMe==false&&mineMe==false&&flagMe==false&&kaefigMe==false)
        {
     if(RPCTest.kaefigAktiv==false)
     {
   canDestroyObject=true;
   networkView.RPC("setcanDestroyObjecttrue", uLink.RPCMode.Others);
     }
     if(canGetNewItem==true)
     {
   audio.PlayOneShot(aufnehmenSound);
   bombeMe=true;
     } 
 } 
 if(canDestroyObject==true)
 {    
  testPosOther=other;   
  testPos();
 }
    }    
}

Weiterhin wird im Skript festgelegt, welches Objekt zerstört wird (objectToDestroy). In der Abfrage if(networkView.isMine) wird noch einmal genau nachgesehen ob man auch wirklich kein Item hat (if(bombeMe==false&&...)) und ob der Käfig im Moment nicht aktiv ist. Nur dann wird das auf dem Boden liegende Item zerstört und die Variable bombeMe wird true.
Das Zerstören des Items passiert in einer ausgelagerten Funktion.

In einem anderen Skript kann nun durch das drücken der Aktionstaste die Bombe ausgelöst werden. In diesem Fall wird ein neues Objekt instanziiert und die Variable bombeMe wieder false:

if(itemManager.bombeMe==true)
{ 
    bombeAusloesbar = uLink.Network.Instantiate(bombeAusloesbarPrefab, 
    new Vector3(transform.position.x-30,transform.position.y+5,
    transform.position.z), transform.rotation, 0);  
    itemManager.bombeMe=false;                    
}

Nun fehlt nur noch die Bewegung der Bombe. 
Durch den auf dem instanziierten Objekt enthaltenen Rigidbody kann ich die Funktion AddForce(); ausführen um die Bombe zu bewegen. 
Sobald die Bombe nun in einen Trigger hinein fliegt, wird sie je nach dem dem eigenen oder dem gegnerischen Spieler Schaden anrichten. Wenn der Trigger kein Spieler war, wird die Bombe einfach zerstört.

void OnTriggerEnter(Collider other)
{
    if(other.tag=="Player")
    { 
        playerGetroffen=other.gameObject;
        if(networkView.isMine)
        {
            if(playerGetroffen==Player)
            {
   RPCTest.getroffen=true; 
   RPCTest.healthPointsEnemy-= Screen.width/3*0.95f/10;
   networkView.RPC("bombeTreffer",uLink.RPCMode.Others);
     }
     else
     {     
  networkView.RPC("stopMovement", uLink.RPCMode.Others); 
  RPCTest.healthPointsEnemyLocal-= Screen.width/3*0.95f/10;     
            }
     Destroy(this.gameObject);
 }
    }
    if(other.tag=="LevelObject"||other.tag=="Boden")
    {
  Destroy(this.gameObject);
    }
}








No comments:

Post a Comment