6.2 Animācijas un Tween
Stundas uzdevums: Pievienot animācijas UI un spēles objektiem ar AnimationPlayer un Tween.
80 min plāns: Teorija un paraugs (~10 min) · 1. uzdevums (~20 min) - uztaisi pirmo Tween animāciju · 2. uzdevums (~25 min) - animē izvēlnes parādīšanos · 3. uzdevums (~20 min) - pievieno atsauksmes animāciju spēlē · Iesniegšana (~5 min).
Pirms sāc: atver savu izvēlni no 6.1 stundas. Animācija nav tikai skaistums - tā pasaka spēlētājam, ka viņa darbība tika pamanīta.
Teorija: Animācijas Godot
Godot piedāvā divas pieejas animācijām:
- AnimationPlayer - vizuāli (timeline editor) izveidotas animācijas.
- Tween - programmatiski izveidotas vienkāršas animācijas.
// Tween - fade in
private void ShowButton()
{
Tween tween = CreateTween();
button.Modulate = new Color(1, 1, 1, 0); // sākotnēji caurspīdīgs
tween.TweenProperty(button, "modulate", new Color(1, 1, 1, 1), 0.5);
}
// Tween - kustība ar bounce
private void ShakeButton()
{
Tween tween = CreateTween();
Vector2 original = button.Position;
tween.TweenProperty(button, "position", original + new Vector2(10, 0), 0.05);
tween.TweenProperty(button, "position", original - new Vector2(10, 0), 0.05);
tween.TweenProperty(button, "position", original, 0.05);
}
Kā šo izmantot projektā
Atceries: ar redzamu efektu editorā nepietiek. Paskaidro, kura C# klase glabā stāvokli, kura metode to maina un kā Godot node struktūra izmanto šo kodu.
Pārbaudi: UI signāli, audio darbības, debug izvade un publicēšanas sagatave ir sasaistīta ar C# spēles stāvokli.
public class PolishCheckpoint
{
public string Lesson = "6.2 Animācijas un Tween";
public bool UsesCSharp = true;
public bool ConnectsUiSignals = true;
public bool RoutesAudioEvents = true;
public bool VerifiesExportBuild = true;
}
Praktiskie uzdevumi
1. uzdevums -
Uztaisi pirmo Tween animāciju
Beigās objekts vienmērīgi pārvietosies no vienas vietas uz otru.
- Pārliecinies, ka faila sākumā ir
using Godot;. - Izveido kodā
Tween tween = CreateTween();. - Pievieno
tween.TweenProperty(objekts, "position", new Vector2(600, 300), 1.0);. - Būvē un palaid - objektam vienmērīgi jāaizslīd.
- Nomaini ilgumu uz 0.2 un palaid vēlreiz.
- Pievieno
.SetTrans(Tween.TransitionType.Elastic);. - Pieraksti, kā mainījās kustības raksturs.
Gatavs, kad: objekts pārvietojas vienmērīgi, un ar TransitionType.Elastic tas mērķī nedaudz atlec.
2. uzdevums -
Animē izvēlnes parādīšanos
Beigās izvēlne parādīsies mīksti, nevis uzreiz.
- Iestati izvēlnei sākumā
Modulate = new Color(1, 1, 1, 0);. - Izveido
_Readymetodē Tween. - Animē īpašību
modulate:ano 0 uz 1 vienā sekundē. - Palaid un vēro, kā izvēlne parādās.
- Pievieno arī nelielu nobīdi no augšas uz vietu.
- Savieno abas animācijas ar
tween.SetParallel(true);. - Pieraksti, ar ko paralēla animācija atšķiras no secīgas.
Gatavs, kad: izvēlne vienlaikus izgaismojas un noslīd vietā, nevis dara to pa vienam.
3. uzdevums -
Pievieno atsauksmes animāciju spēlē
Beigās spēlētājs redzēs, ka viņa darbība tika pamanīta.
- Izvēlies vienu notikumu savā spēlē, piemēram monētas savākšanu.
- Pievieno tam Tween, kas objektu uz brīdi palielina un tad atgriež.
- Pievieno arī krāsas mirgojumu, kad spēlētājs saņem triecienu.
- Pārliecinies, ka animācija netraucē spēles gaitu.
- Pārbaudi, kas notiek, ja notikums atkārtojas ļoti ātri.
- Apturi iepriekšējo Tween ar
Kill(), ja tas vēl darbojas. - Pieraksti, kāpēc animācija palīdz saprast spēli.
Gatavs, kad: savācot monētu, tā uz mirkli palielinās, un ātri atkārtojot notikumu, animācijas nesajūk.
Papildu uzdevums - Izmēģini AnimationPlayer
Ja pamatdarbs ir gatavs, salīdzini otru pieeju.
- Pievieno scēnai
AnimationPlayermezglu. - Izveido tajā animāciju ar diviem atslēgkadriem.
- Palaid to no koda ar
animationPlayer.Play("nosaukums");. - Pieraksti, kura pieeja bija ātrāk izveidojama.
- Pieraksti, kurā gadījumā labāk lietot katru no tām.
Gatavs, kad: abas pieejas dod animāciju, un tu vari nosaukt, kad kura ir ērtāka.
Ko sagatavo
Stundas mērķis: Tavā spēlē darbojas Tween animācijas: izvēlne parādās mīksti, un vismaz viens spēles notikums dod spēlētājam vizuālu atsauksmi, kas nesajūk pie ātras atkārtošanas.
GitHub krātuvē jābūt:
- README.md ievietota video saite, kurā redzama izvēlnes parādīšanās un spēles notikuma animācija.
- C# fails ar
CreateTweenunTweenPropertyizsaukumiem. - README.md: ar ko paralēla animācija atšķiras no secīgas un kāpēc vajag
Kill().
Kā iesniedz: Veic commit un push. Skolotāja norādītajā vietā ievieto tikai GitHub krātuves saiti; visiem prasītajiem failiem, README.md pierakstiem un pierādījumiem jābūt pašā krātuvē.
Biežākās kļūdas
- Tween nedarbojas:
CreateTween()izveido Tween objektu; ja vēlāk tas jāaptur, saglabā to laukā. - AnimationPlayer skip frames: Animation length pārāk īss vai
Play()izsaukts vairākkārt. - Particles invisible: CollisionShape2D vai Sprite2D parent var ietekmēt visibility.
Godot ekrānuzņēmumi
Koda piemērs (paplašināts)
using Godot;
public partial class Player : CharacterBody2D
{
public void OnTakeDamage(int amount)
{
// Damage number popup
Label damageLabel = new Label();
damageLabel.Text = "-" + amount;
damageLabel.Position = Position + new Vector2(0, -30);
damageLabel.AddThemeColorOverride("font_color", new Color(1, 0, 0));
GetParent().AddChild(damageLabel);
// Tween: peld augšup un izgaist
Tween tween = damageLabel.CreateTween();
tween.SetParallel(true); // abas animācijas paralēli
tween.TweenProperty(damageLabel, "position", damageLabel.Position + new Vector2(0, -50), 0.8);
tween.TweenProperty(damageLabel, "modulate:a", 0.0, 0.8);
tween.Chain().TweenCallback(Callable.From(damageLabel.QueueFree));
// Player flash red
Tween flash = CreateTween();
Modulate = new Color(1, 0, 0);
flash.TweenProperty(this, "modulate", new Color(1, 1, 1), 0.3);
}
}