3.4 Custom C# klases editorā redzamas
Stundas uzdevums: Padarīt savu C# klasi pilnvērtīgi izmantojamu Godot editor (ar Inspector īpašībām).
80 min plāns: Teorija un paraugs (~10 min) · 1. uzdevums (~20 min) - padari klasi redzamu editorā · 2. uzdevums (~25 min) - pievieno rediģējamas īpašības · 3. uzdevums (~20 min) - iestati vērtības Inspector un pārbaudi · Iesniegšana (~5 min).
Pirms sāc: atver savu projektu. Šodien tavu C# klasi varēs noregulēt bez koda maiņas - tieši Godot editorā, kā jebkuru citu mezglu.
Teorija: GlobalClass un Export īpašības
Lai C# klase parādītos Godot Add Node dialogā, tai pievieno atribūtu [GlobalClass]. Lai laukus varētu rediģēt Inspector panelī, tiem pievieno [Export]. Pēc C# izmaiņām projekts ir jāuzbūvē ar Godot Build pogu.
using Godot;
using System;
[GlobalClass]
public partial class Obstacle : CharacterBody2D
{
private int energy = 50;
private float speed = 100.0f;
[Export]
public string ObstacleName { get; set; } = "PrinterQueue";
[Export(PropertyHint.Range, "0,500")]
public int Energy
{
get => energy;
set => energy = Math.Max(0, value);
}
[Export(PropertyHint.Range, "0,500,0.1")]
public float Speed
{
get => speed;
set => speed = Math.Max(0.0f, value);
}
}
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: katrai būtiskai turnīra lomai ir C# klase vienā .cs failā, ar konstruktoriem, metodēm, signāliem vai mantošanu.
public class OopCheckpoint
{
public string Lesson = "3.4 Custom C# klases editorā redzamas";
public bool UsesCSharp = true;
public bool HasScriptFile = true;
public bool HasSingleResponsibility = true;
public bool UsesGodotInspector = true;
}
Praktiskie uzdevumi
1. uzdevums -
Padari klasi redzamu editorā
Beigās tavu C# klasi varēs pievienot scēnai kā parastu mezglu.
- Izveido failu
Obstacle.csar klasiObstacle, kas manto noCharacterBody2D. - Pievieno virs klases atribūtu
[GlobalClass]. - Pievieno privātus laukus
private int energy = 50;unprivate float speed = 100.0f;. - Pārbaudi, ka faila nosaukums ir tieši
Obstacle.cs, jo C# global class ir reģistrjutīgs. - Būvē projektu ar Godot Build pogu.
- Pievieno mezglu scēnai, meklējot
Obstacle. - Pieraksti, kas notiek, ja
[GlobalClass]rindu izdzēš un būvē vēlreiz.
Gatavs, kad: mezglu meklētājā parādās tips Obstacle, un to var pievienot scēnai.
2. uzdevums -
Pievieno rediģējamas īpašības
Beigās laukus varēs mainīt Inspector panelī.
- Uzraksti īpašību
[Export] public int Energy { get; set; } = 50;. - Pievieno ātrumam diapazonu ar
[Export(PropertyHint.Range, "0,500,0.1")] public float Speed { get; set; } = 100.0f;. - Pievieno tekstam
[Export] public string ObstacleName { get; set; } = "PrinterQueue";. - Pievieno setter ar pārbaudi, ja vēlies neļaut negatīvu enerģiju.
- Būvē un atver mezgla Inspector paneli.
- Pārbaudi, ka tur redzami abi lauki.
Gatavs, kad: Inspector panelī pie tava mezgla ir redzami lauki energy un speed.
3. uzdevums -
Iestati vērtības Inspector un pārbaudi
Beigās viena klase apkalpos vairākus dažādus šķēršļus.
- Ievelc scēnā trīs
Obstaclemezglus. - Iestati katram Inspector panelī citu
energyunspeedvērtību. - Izdrukā
_Ready()metodē abus laukus. - Palaid spēli un pārbaudi, vai izdrukā ir tavas ievadītās vērtības.
- Mēģini Inspector panelī ievadīt negatīvu enerģiju.
- Pieraksti, vai tava pārbaude to noķēra.
- Saglabā scēnu un veic commit.
Gatavs, kad: trīs mezgli izdrukā trīs dažādas vērtības, un negatīva enerģija tiek automātiski salabota.
Papildu uzdevums - Pievieno izvēlni ar variantiem
Ja pamatdarbs ir gatavs, ļauj Inspector panelī izvēlēties šķēršļa veidu.
- Pievieno lauku
[Export(PropertyHint.Enum, "PrinterQueue,WifiDrop,MissingMarker")] public string ObstacleType { get; set; } = "PrinterQueue";. - Būvē un atver Inspector paneli.
- Izvēlies nolaižamajā sarakstā vienu variantu.
- Izdrukā izvēlēto veidu, palaižot spēli.
Gatavs, kad: Inspector panelī ir nolaižams saraksts ar trim šķēršļu veidiem.
Ko sagatavo
Stundas mērķis: Tava C# klase parādās Godot editorā kā mezgla tips, tās lauki ir rediģējami Inspector panelī, un vairāki viena tipa mezgli var strādāt ar dažādām vērtībām bez koda maiņas.
GitHub krātuvē jābūt:
- Fails
Obstacle.csar[GlobalClass]un[Export]īpašībām. - Ekrānuzņēmums ar Inspector paneli, kurā redzami tavi lauki.
- Ekrānuzņēmums ar Output paneli, kurā trīs mezgli izdrukā trīs dažādas vērtības.
- README.md: kāpēc noderīgi, ka vērtību var mainīt editorā, nevis kodā.
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
- Inspector lauks neparādās: pēc
[Export]pievienošanas nospied Godot Build. - Klase neparādās Add Node: pārbaudi
[GlobalClass]un to, ka fails saucasObstacle.cs. - Export hint kļūda: pārbaudi
PropertyHint.RangevaiPropertyHint.Enumsintaksi.
Godot ekrānuzņēmumi
Koda piemērs (paplašināts)
using Godot;
using System;
public partial class Obstacle : CharacterBody2D
{
private int energy = 50;
private float speed = 100.0f;
[Export]
public string ObstacleName { get; set; } = "PrinterQueue";
[Export(PropertyHint.Range, "0,500")]
public int Energy
{
get => energy;
set => energy = Math.Max(0, value);
}
[Export(PropertyHint.Range, "0,500,0.1")]
public float Speed
{
get => speed;
set => speed = Math.Max(0.0f, value);
}
}