Göra ett 2D spel med Unity (15 / 19 steg)
Steg 15: Bomb lekande
Det första vi behöver är ett Prefab av våra bomb. Navigera till mappen prefab och skapa en ny prefab, namn den bomb. Dra objektet Bomb till bomb prefab. Ta bort det ursprungliga Bomb objektet i hierarkin när du har det som ett Prefab.
Skapa ett nytt quad objekt namn den BombSpawn. Placera den ovan kameran kontrollera i Main kameravy eller i spelfönstret.
Skapa ett nytt skript i mappen skript kallas BombSpawner, och ge den följande kod.
använder UnityEngine;
använder System.Collections;
allmän klass BombSpawner: MonoBehaviour {
en offentlig objektmatris för vilka objekt att leka
offentliga GameObject [] obj;
min och max tider för en annan spawn
offentliga flyta spawnMin = 3f;
offentliga flyta spawnMax = 2f;
Ogiltig Start () {
börja leka
Spawn ();
}
void Spawn() {
få slumpmässiga nummer
flyta rand = Random.Range (0, 1000);
om slumptal är större än 700 göra en bomb
om (rand > 700) {
Initiera (obj [Random.Range (0, obj. GetLength (0))], transform.position, Quaternion.identity);
}
åberopa spawn med slumpmässig tidsintervall mellan min och max
Åberopa ("leka", Random.Range (spawnMin, spawnMax));
}
}
Först göra BombSpawn objekt ett barn av Main kameran genom att dra det till kameran via fönstret hierarki.
Nu dra scriptet till BombSpawn objektet i fönstret hierarki. Dra nu Bomb prefab med BombSpawn öppnades inspektören, den lilla triangeln märkta Obj i komponenten skript.
Vi måste lägga till en om uttalande tillbaka i vårt Bomb skript (från sista steg) för att fördröja bomberna faller tills efter att spelaren har börjat att gå på linjen. En snabb kontroll i min scen visar den handen sitter vid 7. något så jag kommer att försena dropparna tills bomberna är förbi 12.
Här är det modifierade Bomb scriptet.
allmän klass bomb: MonoBehaviour {
en hållare för våra animatör
Animatör anim;
en offentlig float för explosion radie
offentliga flyta explodeRadius = 1f;
Använd detta vid initiering
Ogiltig Start () {
anim = GetComponent < animatör > ();
}
Uppdatering anropas en gång per bildruta
void uppdatering () {
om denna bomb är skapat efter spawner når en position förbi x = 12
om (transform.position.x > 12) {
this.gameObject.SetActive (sant);
}
annars bomb ingen worky
annat {
this.gameObject.SetActive (falskt);
}
om vi gjort exploderande
om (anim. GetCurrentAnimatorStateInfo (0). IsName ("bombdead")) {
förstöra alla objekt i en radie om de inte är märkta spelare eller hand
Collider2D [] colliders = Physics2D.OverlapCircleAll (transform.position,explodeRadius);
foreach (Collider2D col i colliders) {
om (col.tag! = "Spelare" & & col.tag! = "hand") {
Destroy(Col.collider2D.gameObject);
}
}
Destroy(this.gameObject);
}
}
}
Nu Robot kan hoppa på linjen och gå en liten bit innan bomberna faller... försök den ute. Fortfarande inte mycket utmanande. Låt oss kopiera objektet BombSpawn! Sedan flytta bara den över lite och vi har två bomb lekande, låt oss spela.