›_ebskola.lv
sākt stundu →
Prog II · 6. tēma · 6 stundas - C# · UI · Audio · itch.io

UI, audio //
un publicēšana

Polished Control nodes UI, Tween animācijas, audio bus sistēma un desktop eksports uz itch.io. Kursa noslēgums.

6 stundas Control · Tween · Audio Puzzle spēle
# 01 stundu plāns

6 stundas - UI, audio, debug un publicēšana

noslēguma projekts →
CanvasLayer → VBoxContainerSpēlētIestatījumiIzietControl · Label · Button · ProgressBar// UI nodes
Godot · ControlUI

UI elementi un Control nodes

CanvasLayer, VBoxContainer, Button, Label, ProgressBar - galvenā izvēlne.

6.1 stundaatvērt ↗
scale0.0alphatween.TweenProperty(node, "scale", target, 0.3)// Tween
Tween · animācijaanimācijas

Animācijas un Tween

CreateTween(), TweenProperty(), easing curves, AnimationPlayer spēles stāvokļiem.

6.2 stundaatvērt ↗
MasterMusicSFXAudioStreamPlayer · AudioBus · AudioServer// audio buses
Audio · busesaudio

Audio sistēma

Audio buses (Master/Music/SFX), AudioStreamPlayer, skaņas efekti un mūzika C# kodā.

6.3 stundaatvērt ↗
Godot ProfilerFPS:60CPU:4.2ms_PhysicsProcess_Processdraw callsDebugger · Profiler · Remote tab// Profiler
Debugger · Profileratkļūdošana

Atkļūdošana un profilēšana

Godot Debugger, Profiler FPS/CPU laiki, Remote Inspector, atmiņas noplūžu meklēšana.

6.4 stundaatvērt ↗
Export TemplateWindows.exeLinux.x86_64macOS.app→ itch.io uploaddesktop ZIP → lejupielāde// eksports
Export · itch.iopublicēšana

Eksports un publicēšana

Export templates, Windows/Linux/macOS eksports, ZIP augšupielāde itch.io un spēles lapa.

6.5 stundaatvērt ↗
Puzzle Spēle · Līmenis 3Gājieni: 23 · ★★★// kursa noslēgums
C# · Godotprojekts

Noslēguma projekts: Puzzle spēle

Polished puzzle spēle ar UI, audio, animācijām, save/load un publicēta itch.io. Kursa noslēgums.

6.6 noslēguma projektsatvērt ↗
# 02 špikeris

6. tēmas špikeris - UI, animācijas, skaņa un publicēšana

Saskarne, Tween, audio, atkļūdošana un eksports. Katrs bloks atbilst vienai stundai.

6.1 UI: Control mezgli un konteineri

// Control mezgli NAV Node2D - tiem ir enkuri, konteineri un tēma.
//   Label            teksts            Button       poga
//   LineEdit         viena rinda       TextEdit     vairākas rindas
//   VBoxContainer    kārto vertikāli   HBoxContainer  horizontāli
//   GridContainer    režģis            PanelContainer fons un rāmis
// Konteiners kārto bērnus PATS - nelieto rokas pozīcijas tajā.

using Godot;

public partial class MainMenu : Control
{
    public override void _Ready()
    {
        Button button = GetNode<Button>("VBoxContainer/StartButton");
        button.Pressed += OnStartPressed;
    }

    private void OnStartPressed()
    {
        GetTree().ChangeSceneToFile("res://level1.tscn");
    }
}

Enkurs (Layout -> Anchors Preset -> Center) notur izvēlni vidū, mainot loga izmēru.

6.2 Tween - animācija ar kodu

Tween tween = CreateTween();

// no pašreizējās vērtības uz (600, 300) vienā sekundē
tween.TweenProperty(node, "position", new Vector2(600, 300), 1.0);

// izgaismošanās
node.Modulate = new Color(1, 1, 1, 0);
tween.TweenProperty(node, "modulate:a", 1.0, 0.5);

tween.SetParallel(true);                              // visas reizē, nevis pēc kārtas
tween.SetTrans(Tween.TransitionType.Elastic);        // atlec mērķī

// Ja notikums var atkārtoties ātri - apturi veco:
if (activeTween != null && activeTween.IsRunning()) activeTween.Kill();

// AnimationPlayer = vizuāli veidota animācija ar atslēgkadriem
//   player.Play("uzvara");

Animācija nav tikai skaistums - tā pasaka spēlētājam, ka darbība tika pamanīta.

6.3 Audio: efekti, mūzika un bus

AudioStreamPlayer sfx = GetNode<AudioStreamPlayer>("SFX");
sfx.Play();

// Mūzikas mīksta ienākšana
AudioStreamPlayer music = GetNode<AudioStreamPlayer>("Music");
music.VolumeDb = -40;
music.Play();
CreateTween().TweenProperty(music, "volume_db", 0.0, 1.0);

// Atsevišķi bus (apakšā cilne Audio): Master -> Music , SFX
int index = AudioServer.GetBusIndex("Music");
AudioServer.SetBusVolumeDb(index, -10.0f);

// Skaļumu mēra decibelos:  0 dB = pilns , -80 dB = kluss

Mūziku un efektus liec atsevišķos bus - tad spēlētājs var izslēgt mūziku, saglabājot skaņas.

6.4 Atkļūdošana: trīs veidi atrast kļūdu

// 1. Izdrukas - ātrākais veids saprast, KUR vērtība kļūst nepareiza
GD.Print("pirms: ", Position);
GD.PrintErr("KĻŪDA: mezgls nav atrasts");   // sarkans

// Pašpārbaude - labāk brīdinājums nekā klusa avārija
Node node = GetNodeOrNull<Node>("Player");
if (node == null) GD.PrintErr("Nav mezgla Player!");

// 2. Breakpoint - Debugger cilne
//    uzklikšķini rindas numura kreisajā malā -> spēle apstājas
//    Stack Variables rāda VISUS mainīgos uzreiz, neko neizdrukājot
//    Step Into / Step Over - iet pa vienai rindai

// 3. Profiler - Debugger -> Profiler -> Start
//    kārto pēc laika -> augšā ir funkcija, kas ēd visvairāk

Izdrukas ir ātrākas vienai vērtībai. Breakpoint ir labāks, kad jāredz daudz mainīgo reizē.

6.5 Eksports un publicēšana

# 0. Editor -> Manage Export Templates -> Download (vienreiz)

# Pirms eksporta C# projektam
dotnet build

# Desktop versija
# Project -> Export -> Add -> Windows/Linux/macOS -> Export Project
# build/ mapē jābūt visiem eksportētajiem failiem

# Pārbaude
# 1. Aizver Godot
# 2. Palaid eksportēto failu no build/ mapes
# 3. Saspied visu build/ saturu ZIP arhīvā
# 4. Izpako ZIP citā mapē un palaid vēlreiz

# Publicēšana: itch.io -> Upload new project -> Downloadable
#   augšupielādē ZIP un norādi platformu

# Godot 4 C# šajā kursā nepublicējam kā Web build.

Pēc publicēšanas obligāti pārbaudi lejupielādi un izpakošanu citā mapē - tā noķersi trūkstošus eksportētus failus.

C# GetTree().ChangeSceneToFile("res://menu.tscn"); // navigācija