Doporuceni

Kdy je nejlepší čas zplodit hosta?

Zdravíme začínající vývojáře! V tomto článku se na příkladu 2D hry naučíme, jak spawnovat objekty na herní scéně. Sice je vhodný pro 3D, ale s minimálními změnami v kódu. Nebudeme to zdržovat příliš dlouho, ale pojďme hned na věc.

Pro začátek pomocí okna Hierarchie Vytvořme prázdný herní objekt (Create Empty) a zavolejte jej SpawnArea. Tento objekt bude naším spawnerem. Vytvořte také prefabrikát pro objekt, který se objeví. Vytvořil jsem svůj panel na základě pravidelného kulatého 2D objektu (2D Object – Sprites – Circle). Pojmenoval tento panelák Kruh.

Spawner spolu s prefabrikátem je připraven! Ale aby tento spawner fungoval, musíte napsat skript. Pomocí okna Projekt vytvořit C# skript se jménem Potěr, a přiřaďte jej předem k našemu objektu s názvem SpawnArea. Do skriptu napište následující řádky kódu:

using UnityEngine; public class Spawner : MonoBehaviour < public GameObject enemyPrefab; public float timeSpawn = 2f; private float timer; private void Start() < timer = timeSpawn; >private void Update() < timer -= Time.deltaTime; if (timer >>

Pojďme se rychle podívat na kód:

  • Na řádku #5 jsme vytvořili proměnnou nepřítelPrefab, ve kterém bude uložen odkaz na náš panel, který se vytvoří.
  • V řádcích #7-8 jsme vytvořili dvě proměnné zodpovědné za čas. V proměnné timeSpawn jsou uloženy informace o tom, jak dlouho trvá vytvoření objektu na scéně. A dovnitř Časovač Uloží se samotný časovač, načež se na herní scéně vytvoří objekt. O něco později pochopíte rozdíl.
  • V metodě Start() jsme v proměnné Časovač zadejte hodnotu z timeSpawn.
  • V metodě Aktualizovat() S každým snímkem zkracujeme čas našeho časovače Časovač, a jakmile skončí, pak hodnota Časovač se aktualizuje a na herní scéně se pomocí metody Instantiate() vytvoří nový objekt.

A nakonec musíme nakonfigurovat náš skript v okně Inspektor:

  • V Nepřátelský panelák přetáhněte panel vašeho objektu Kruh.
  • V Spawn času zadejte čas spawnování pro časovač. Uvedl jsem hodnotu 2.

Připraveno! V této fázi můžete spustit svůj projekt a ujistit se, že vše funguje úspěšně! Každé 2 sekundy se vytvoří nový herní objekt.

Spawner vytvořený výše funguje dobře, ale navrhuji ho trochu vylepšit, protože se mi na něm nelíbí dvě věci. Za prvé, všechny objekty jsou vytvořeny v jednom bodě, ale chtěl bych, aby byly vytvořeny v náhodné oblasti v určitém poloměru. A za druhé bych si přál, aby se objekty nevytvářely v případech, kdy je ve hře již 10 objektů.

Navrhuji náš kód trochu přepsat takto:

using UnityEngine; public class Spawner : MonoBehaviour < public GameObject enemyPrefab; public int maxEnemy = 5; public float timeSpawn = 2f; private float timer; public float distance = 3; private void Start() < timer = timeSpawn; >private void Update() < timer -= Time.deltaTime; if (timer >> > 

Co jsme sem přidali? Na řádek #6 jsme přidali proměnnou maxEnemy, která je zodpovědná za maximální počet vytvořených objektů na herní scéně. A na řádku #11 v proměnné vzdálenost pro náš spawner rádius je uložen multiplikátor, v rámci kterého budou objekty vytvářeny. A samotný poloměr je zapsán na řádku #26 přes Random.insideUnitCircle.

Přečtěte si více
Kdy byste měli prořezávat svůj cypřiš?

Na řádku #24 používáme vlastnost childCount ke kontrole, kolik objektů jsme vytvořili. A pokud je jejich počet menší než 10, vytvoří se nový objekt, jinak nedělejte nic.

Náš scénář je připraven! Nyní to spusťte a podívejte se na následující obrázek. Každé 2 sekundy se v našem projektu vytvoří jeden objekt v náhodném bodě o poloměru 3 z našeho spawneru. A jakmile se vytvoří 10 objektů, spawner přestane fungovat.

Ale i tento potěr se dá vylepšit. Můžeme spawnovat ne stejný objekt, ale různé objekty, které se budou plodit náhodně. Ale to je úplně jiný příběh. Můžete si přečíst naši samostatnou příručku o tom, jak to lze implementovat, s názvem „Vytváření náhodného spawnu objektů“.

Tím náš průvodce končí. Pokud máte nějaké dotazy, zeptejte se jich v komentářích. A také nezapomeňte dát lajky.

Zpočátku se nezdá příliš intuitivní, jak můžete v godotu spawnovat předměty. Doufejme však, že v tomto tutoriálu mohu pokrýt vše, co potřebujete vědět o spawnerech godot, vše od toho, jak spustit hráče, životní cyklus godot, použití časovačů a jak nastavit pozici spawnu nebo dokonce náhodně spawnující objekty v náhodných pozicích. Také se díváme na to, jak použít godot ke spawnování kulky. Zakrytý bude i Godot spawnování nepřátel. Pod každou sekcí tohoto blogového příspěvku bude výukové video, pokud máte zájem o sledování formátu videa.

Jak spustit hráče v godot a instanci scény

Jakmile to budete mít, uložte si přehrávač jako Player.tscn. Nyní vytvoříme novou scénu s názvem Game.tscn. Který v tuto chvíli bude mít pouze Node2D, který jsem přejmenoval na Game. Jakmile to uděláme, můžeme nyní přidat skript pro spawnování našeho přehrávače, ale předtím, než to uděláme, stačí stisknout play, abychom zkontrolovali, že obrazovka je prázdná a že game.tscn je hlavní scéna.

Měli byste mít něco jako výše. Dobře, takže nyní na FileSystem klikněte pravým tlačítkem a vytvořte nový skript. Říkejte tomu PlayerSpawner.

Když to otevřete, měli byste mít toto.

Nyní upravíme tento skript na.

extends Node func _ready(): var scene = load("res://Player.tscn") var player = scene.instance() add_child(player) 

Takže s tímto hotovo. Můžete pokračovat a toto připojit ke svému hernímu uzlu jako skript.

Takže pokud jste to udělali správně, měli byste skončit.

Skvělé, takže teď se nám rýsuje hráč. Udělejme teď něco trochu zábavnějšího. Pojďme vytvořit způsob, jak může náš hráč vystřelit kulku. Pojďme se tedy vrhnout na to, abychom z Godota vytvořili kulku.

Godot Spawn Object: Godot spawn bullet sprite

Pojďme do toho. Abychom vytvořili kulku, nejprve potřebujeme kulku. Vytvořil jsem velmi základní obdélníkový obrázek, který použijeme pro naši kulku. Aby to fungovalo, začneme s novou scénou, kde můžeme vytvořit kulového skřítka a nějaká těla, která nám umožní střílet naši kulku rychlostí.

Takže pokračujte a vytvořte novou scénu a uložte ji jako Projectile.tscn. Tuto strukturu uzlu budete chtít replikovat, aby fungovala.

Přečtěte si více
Tajemství správného broušení brzdových kotoučů pro dokonalé brzdění

Jakmile máte toto nastavení, musíme vytvořit GDScript nazvaný projektil. Jakmile toto vytvoříte, připojte jej ke svému Projectile KinematicBody2D. Pak v našem skriptu budeme používat tento kód.

extends KinematicBody2D var velocity = Vector2() func _ready(): print("Shooting projectile") velocity.y = -600 func _physics_process(delta): move_and_slide(velocity) 

Nejprve rozšíříme třídu KinematicBody2D, abychom měli přístup k move_and_slide. Potom deklarujeme rychlost, která bude použita k řízení rychlosti naší střely. V naší funkci _ready jednoduše přiřadíme jakoukoli rychlost, aby naše kulka vystřelila přímo nahoru. Poté zavoláme pohyb a posun, abychom pohnuli naší kulkou.

Skript pohybu postavy a spoušť spawnování kulky

Nyní máme střílející kulku, pojďme se zamyslet nad tím, jak bychom mohli použít godot ke spawnování nepřátel v náhodné pozici nebo na stanovené pozici.

Godot zplodí nepřátelský uzel na pozici

Začněme vytvořením nové scény opět s názvem Enemy.tscn. Chceme nastavit něco podobného jako struktura uzlových bodů. Takže něco takového.

Nyní se musíme podívat na vytvoření spawner skriptu, který zpočátku vytvoří spoustu nepřátel náhodně na náhodné pozici.

Uděláme to ve skriptu nazvaném SceneSpawner. Tento skript použiji k vytvoření jakýchkoli herních objektů, které nejsou statické s kódem. Zde je kód pro náš skript.

extends Node func _ready(): var rand = RandomNumberGenerator.new() var enemyscene = load("res://Enemy.tscn") var screen_size = get_viewport().get_visible_rect().size for i in range(0,10): var enemy = enemyscene.instance() rand.randomize() var x = rand.randf_range(0,screen_size.x) rand.randomize() var y = rand.randf_range(0,screen_size.y) enemy.position.y = y enemy.position.x = x add_child(enemy) 

Tento skript tedy přiřadíme našemu uzlu Root Game. Pak byste měli skončit s něčím takovým.

Pojďme si vysvětlit kód. Takže první věc, kterou uděláme, je vytvořit nový RandomNumberGenerator, který nám pomůže vytvořit náhodné rozsahy, které umožní vytváření náhodných pozic. Poté načteme naši nepřátelskou scénu. Jakmile to uděláme, získáme velikost našeho viditelného herního pohledu, který použijeme k ovládání toho, kde se naši nepřátelé mohou plodit. Nyní chceme vytvořit 10 nepřátel, takže vytvoříme základní rozsah pro smyčku, abychom mohli začít plodit nepřátele. V každé smyčce budeme instancí naší nepřátelské scény. Potom jsme zavolali randomize, abychom se ujistili, že pro každou hodnotu máme náhodné semeno. Pak dostaneme náhodné hodnoty pro x a y a nakonec nastavíme pozici. Jakmile nastavíme pozici, přidáme našeho nepřítele jako dítě do našeho kořenového uzlu.

Pokud jste se chtěli objevit na nastavené pozici nebo umístění, jednoduše vynecháte náhodnou část a pevně zakódujete pozici, kterou chcete použít.

Závěrečná slova

Pokud se vám tento návod líbil. Zvažte prosím, zda mě podpoříte přihlášením k odběru mého kanálu YouTube: Kanál YT Generalist Programmer. Zvažte také prosím, abyste mě sledovali na twitteru a připojili se k rozporu zde: Discord

Podívejte se na některé z mých dalších tutoriálů zde.

  • Výukový program Quasar framework: desktop, pwa a mobilní aplikace
  • C# výukový program služby Windows – pomocí horní police
  • Ultimate Python Web Scraping Tutorial: S Beautifulsoup a požadavky
  • Vývoj aplikací Python pro začátečníky – návod kivy pro mobilní aplikaci
  • Godot webassembly – export do webového html5 tutoriálu

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *

Back to top button