9. diel - Unity (C #) Android: Prestavba, bodáky
V minulej lekcii, Unity (C #) Android: MenuPart, Eraser, pozadia 2 , sme vylepšili odstraňovanie prekážok, detekciu objektu a pridali levely.
Vítam vás u ďalšieho Unity3D tutoriálu, kde vytvárame vlastnú hru pre Android. Dnes upravíme mapu, pohyb hráča a zmeníme a doplníme aj spôsob, akým sa nám posúvajú prekážky.
Vylepšenia particle systému
Najskôr ale urobíme drobnú zmenu v našom Particle Systému, ktorý sme si
vytvorili pre rozbíjanie Stalag. Oproti minule si nastavíme naviac ešte Start
Color, ktorú zvolíme modrú. Tiež Shape zmeníme na Sphere o rádiusu
2
. A aby sme docielili krajšieho efektu, aktivujeme Rotation over
Lifetime, malou šípkou napravo zvolíme Random Between Two constants a hodnoty
nastavíme na -180
až 180
. Tým zaistíme, aby sa
nám Particle trochu otáčali a nevyzerali tak staticky:
Nová prekážka
Začneme úpravou mapy. Aby to hráč nemal tak jednoduché a trochu sa u hraní zapotil, pretvoríte si strop, na ktorý pridáme bodliaky. Na konci článku zas máte základnú grafiku k stiahnutiu. Bodliaky si importuje do Unity.
Bodliakom ďalej pridáme Collider. Môžeme si zvoliť veľa Collider, cez ktoré to urobíme, ale nám postačí box collider2D. Roztiahneme ho, aby pokrýval celý sprite. Ďalej tiež nastavíme Tag na Wall. Vytvoríme si z toho prefab:
Nebudeme chcieť, aby sa s nami bodliaky hýbali podobne, ako sa hýbe mapa. Nevyzeralo by to veľmi pekne, pretože by vlastne leteli s nami. Preto ich budeme generovať podobne ako Stalag. Najskôr si Spiky treba 30x nakopírujeme vedľa seba:
To zatiaľ stačí. Ďalej je budeme za Ereserem posúvať späť za obrazovku, rovnako ako pozadie, čím docielime nekonečného efektu, aj keď ich bude stále len 30.
Úprava pohybu
Teraz si prerobíme pohyb hráčov. Keď hráme, kamera i hráč sú pripútané k sebe a hráč sa stále nachádza v strede. To zmeníme a urobíme, aby sa kamera nepohybovala v smere osi Y, ale iba po osi X. Docielime toho tak, že kameru oddelíme od hráča. Tiež Ereser si oddelíme od hráčov pre použitie ďalej:
Skript kamery
Do kamery si pridáme skript CameraFollowPlayer
, vďaka ktorému
bude kamera nasledovať hráča:
public Transform playerRef; public bool withOffset; public int offset; bool error = false; void Start() { if (playerRef == null) error = true; } // Update is called once per frame void Update() { if (error) return; Vector3 pos = transform.position; Vector3 newPos = playerRef.position; if (withOffset) newPos.x += offset; newPos.z = pos.z; newPos.y = pos.y; transform.position = Vector3.Lerp(transform.position, newPos, 1f); }
V tomto skripte nás už nič neprekvapí okrem funkcie Lerp()
.
Táto funkcia zabezpečuje plynulý pohyb z bodu A do bodu B. Posledným
parametrom hovoríme, ako plynulo sa bude daný objekt posúvať. Jediné, na
čo nesmieme zabudnúť po dorobenie skriptu, je priradiť hráča do premennej
playerRef
.
Ďalej Ereser objektu pridáme tiež tento skript a za playerRef
priradíme tiež Player. Offset nastavíme podľa toho, ako vzadu máme Ereser
na mape posunutý na osi Y a Odznačte WithOffset. V mojom prípade mám offset
nastavený na -25
. Ereseru ďalej tiež pridáme Rigidbody2D, na
ktorom nastavíme gravitáciu na 0 fixných uhly:
Skript Ereseru
Ereseru ďalej upravíme skript, aby posúval ako steny, tak pozadie. Skript teda bude vyzerať nasledovne:
void OnTriggerEnter2D(Collider2D col) { if(col.CompareTag("Stalag")) { if(col != null) Destroy(col.gameObject); } if(col.CompareTag("Wall") || col.CompareTag("Background")) { col.SendMessage("Move"); } }
Kontrolujeme tu, či sa Ereser stretol so stenou a alebo s pozadím, podľa toho daný objekt posunie.
Aby nám všetko fungovalo ako má, pridáme Prefab našich bodliaka skript
BGMover
a trochu BGMover
poupravíme, aby fungoval pre
náš nový účel. Odmazať náš TriggerEnter a pridáme tam túto
metódu:
public int count; void Move() { Bounds b = GetComponent<SpriteRenderer>().bounds; float sizeX = b.size.x; Vector3 pos = transform.position; pos.x += count * sizeX - 10; transform.position = pos; }
Keďže sme skript ho pôvodne používali iba na pozadí, tak by nám
nefungoval na našej novú prekážku, ktorá by sa neposúvala o požadovaný
kus. Teda si zavádzame novú premennú count
, ktorú veľkosť
daného objektu budeme násobiť. Teda na pozadí túto hodnotu nastavíme na 2,
ako bolo pôvodne vo skriptu a pre Spiky nastavíme 30
, pretože
sme si vytvorili 30 kópií spike vedľa seba.
Hru môžeme spustiť a vyskúšať.
Stiahnuť
Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkamiStiahnuté 317x (8.59 kB)