2023-08-13 18:15 Doba čtení: 11 min

Jak vytvářet úrovně ve hrách Godot

Tvorba herních úrovní představuje klíčový prvek herního designu, který má zásadní vliv na atraktivitu hry. Úrovně dodávají hře strukturu a výzvy, které udržují hráče aktivní a motivují je k postupu hrou.

Pečlivým navrhováním promyšlených úrovní můžete pro své hráče vytvořit podmanivý a zábavný herní zážitek. Ať už jste začínající nebo zkušený herní vývojář, Godot usnadňuje tvorbu strhujících úrovní, ke kterým se budou hráči s nadšením vracet.

Zahájení práce s projektem v Godot

Než se pustíte do samotné tvorby úrovní, je nezbytné správně nastavit váš 2D herní projekt v Godot Game Engine.

Kód, který je použit v tomto článku, je dostupný v tomto úložišti na GitHubu a můžete jej zdarma používat pod licencí MIT.

Vytvořte novou scénu a přidejte uzel Node2D jako hlavní uzel. Bude sloužit jako kontejner pro všechny ostatní uzly v dané scéně. Jakmile máte projekt nastavený, je čas umístit do scény postavu hráče.

Novou scénu vytvoříte kliknutím pravým tlačítkem na panel Scéna a následným výběrem "Nová scéna". Poté přidejte uzel CharacterBody2D, který bude reprezentovat postavu hráče. Uzel CharacterBody2D obsahuje přednastavené funkce pro detekci pohybu a kolizí pro 2D postavy.

K uzlu CharacterBody2D přidejte uzel CollisionShape2D s obdélníkovým tvarem a uzel Sprite, který bude vizuálně reprezentovat hráče.

Po konfiguraci postavy hráče a jejích vizuálních prvků se můžete zaměřit na návrh své první herní úrovně.

Tvorba dvou herních úrovní

K vytvoření úrovní v Godot můžete využít soubory scén (.tscn), které reprezentují každou úroveň samostatně. S pomocí dvou úrovní můžete implementovat jedinečné rozvržení a pohyblivé plošiny.

Kód pro hráče

Skript CharacterBody2D je zodpovědný za zpracování pohybu hráče na základě jeho vstupů. V poskytnutém GDScriptu se směr pohybu vypočítává z aktuálně stisknutých kláves a následně se nastavuje rychlost hráče.

Rychlost hráče ovlivňuje to, jak rychle se postava pohybuje, a funkce move_and_collide se stará o detekci kolizí.

 extends CharacterBody2D

var speed = 300

func _physics_process(delta):
    var input_dir = Vector2.ZERO

    if Input.is_action_pressed("ui_left"):
        input_dir.x -= 1

    if Input.is_action_pressed("ui_right"):
        input_dir.x += 1

    if Input.is_action_pressed("ui_up"):
        input_dir.y -= 1

    if Input.is_action_pressed("ui_down"):
        input_dir.y += 1

    velocity = input_dir.normalized() * speed
    move_and_collide(velocity * delta)

Kód pro plošinu

Skript Platform je rozšířením StaticBody2D, což znamená, že se plošina sama od sebe nepohybuje, dokud na ní není aplikován pohyb. V tomto konkrétním příkladu můžete pomocí proměnné move_speed definovat, jak rychle se bude plošina pohybovat.

Plošina se pohybuje horizontálně tam a zpět v určitém rozsahu (v tomto případě od 100 do 400 jednotek). Když dosáhne okraje, změní směr svého pohybu.

 
extends StaticBody2D

const move_speed = 100
var move_direction = Vector2(1, 0)

func _physics_process(delta):
    var platform_movement = move_direction * move_speed * delta
    translate(platform_movement)

    
    if position.x > 400 or position.x < 100:
        move_direction *= -1

Použitím těchto skriptů můžete vytvářet zajímavé pohyby pro plošiny a navrhovat poutavé herní zážitky v rámci svých plošinových her.

Propojení herních úrovní

V typické hře se předpokládá, že hráči budou plynule přecházet z jedné úrovně do druhé. Pro tento účel je vhodné implementovat skript Level Manager, který bude spravovat přepínání mezi úrovněmi, když hráč překročí hranici obrazovky.

Skript Level Manager sleduje aktuální číslo úrovně a velikost herní obrazovky. Načte úvodní úroveň (úroveň 1) během _ready(). Funkce load_level přijímá jako vstup číslo úrovně, vytvoří cestu k souboru odpovídající scény a následně vytvoří instanci této úrovně.

Přidání nové úrovně jako podřízeného prvku správce úrovní zajistí efektivní přepnutí na aktuální úroveň.

 extends Node2D

var level_number = 1
var screen_size = Vector2()
var is_switching_level = false

func _ready():
    screen_size = get_viewport_rect().size
    load_level(level_number)

func load_level(level):
    var level_path = "res://Level" + str(level) + ".tscn"
    var level_scene = load(level_path)
    var level_instance = level_scene.instantiate()
    add_child(level_instance)
    is_switching_level = false

func switch_level():
    if is_switching_level:
        return

    is_switching_level = true
    level_number += 1

    if level_number > 2:
        level_number = 1

    
    var player = get_node("Node2D/Player")

    if player:
        var player_position = player.position

        if player_position.x < 0:
            player.position.x = screen_size.x
        elif player_position.x > screen_size.x:
            player.position.x = 0
        elif player_position.y < 0:
            player.position.y = screen_size.y
        elif player_position.y > screen_size.y:
            player.position.y = 0

    get_node("Node2D").queue_free()
    load_level(level_number)

func _process(delta):
    
    
    var player = get_node("Node2D/Player")

    if player:
        var player_position = player.position
        var condition1 = player_position.x < 0
        var condition2 = player_position.x > screen_size.x
        var condition3 = player_position.y < 0
        var condition4 = player_position.y > screen_size.y

        if condition1 or condition2 or condition3 or condition4 :
            switch_level()

Implementací Správce úrovní se dosáhne plynulého přecházení mezi úrovněmi a uchování dat hráče, což zaručuje příjemný herní zážitek.

Zahrnutí dodatečných funkcí

Tvorba herních úrovní vám umožňuje do hry zahrnout různé prvky, které ji činí pro hráče poutavější a zábavnější.

Sběratelské předměty

Přidejte sběratelské předměty jako mince, hvězdy nebo klíče, které mohou hráči sbírat pro odemykání nových oblastí nebo získávání odměn. Sběratelské předměty podporují prozkoumávání herního prostředí a přidávají do hry dodatečnou výzvu.

Nepřátelé

Do hry zaveďte nepřátele s různým chováním a vzorci pohybu. Nepřátelé vytvářejí překážky, které musí hráč překonat, což do hry vnáší strategický prvek a napětí.

Vylepšení

Zahrňte vylepšení, která dočasně posilují schopnosti hráče, například zvýšení rychlosti, neporazitelnost nebo vylepšené útoky. Vylepšení přináší momenty posílení a mohou hráčům pomoci překonat náročné pasáže.

Hádanky

Navrhněte herní hádanky, které hráči musí vyřešit, aby postoupili na další úroveň. Hádanky do hry vnášejí prvek logického myšlení a hráči se po jejich vyřešení cítí úspěšní.

Začleněním těchto dodatečných prvků do svých úrovní můžete vytvořit bohatý a rozmanitý herní zážitek, který hráče uchvátí a udrží je ponořené do herního světa.

Osvědčené postupy pro tvorbu úrovní

Při navrhování herních úrovní je dobré se držet určitých osvědčených postupů, které pomohou zajistit, aby byl pro hráče herní zážitek dobře vytvořený a příjemný:

Vyvážení obtížnosti

Udržujte plynulou křivku obtížnosti napříč všemi úrovněmi. Postupně zvyšujte náročnost, abyste hráče udrželi v zapojení bez toho, aby se cítili zahlceni. Postupně zavádějte nové mechanismy a výzvy, čímž hráčům umožníte se přizpůsobit a učit.

Podpora prozkoumávání

Navrhujte úrovně se skrytými cestami, tajemstvími a volitelnými oblastmi, které mohou hráči prozkoumávat. Odměňujte hráče za prozkoumávání pomocí bonusů, sběratelských předmětů nebo zkratek, které hře dodávají na hloubce.

Testování a iterace

Důkladně otestujte své úrovně, abyste odhalili případné problémy, chyby nebo nesrovnalosti. Opakovaně upravujte návrh úrovní na základě zpětné vazby od hráčů, čímž zlepšíte celkový zážitek.

Vizuální a zvukové aspekty

Věnujte pozornost vizuálnímu a zvukovému provedení úrovní. Působivé vizuální prvky a zvukové efekty bez autorských práv výrazně přispívají k atmosféře a pohlcení hrou.

Tok úrovní

Zajistěte, aby tok úrovně byl plynulý a logický. Proveďte hráče úrovní pomocí jasných vizuálních nápověd a vyhněte se slepým uličkám nebo matoucímu rozvržení.

Dodržováním těchto osvědčených postupů můžete vytvářet úrovně, které jsou nejen zábavné, ale také dobře navržené a konzistentní v kontextu vaší hry.

Úrovně zvyšují atraktivitu her v Godot

Úrovně hrají klíčovou roli v tom, aby hry v Godotu byly pro hráče poutavější. Dobře navržené úrovně vytvářejí pocit postupu, úspěchu a prozkoumávání, čímž motivují hráče, aby pokračovali ve hře.

Pochopením principů tvorby úrovní, využitím funkcí Godotu a implementací dodatečných prvků můžete vytvářet úrovně, které hráče upoutají a posunou vaši hru na vyšší úroveň.

Jan Novák
Autor
Czechia

Redaktor zaměřený na Windows, produktivitu a cloudové nástroje.

Předchozí článek
Chrání vás vypnutí telefonu Android před malwarem?
Další článek
4 nejlepší nástroje pro síťové skenování a výčet