Indholdsfortegnelse
Trin 5: Vis spillerens inventory
← Forrige: Inventory-UI | Forside | Næste: Genbrug i en kiste →
Nu samler du delene. Du laver hovedscenen Main, sætter spilleren og UI'et ind i den og forbinder dem med få linjer kode. Bagefter kan du køre hele spillet og se dit første inventory.
Hvorfor en Main-scene?
Player ved ikke noget om UI, og InventoryUI ved ikke noget om spilleren. Det er med vilje. Nogen skal dog forbinde dem, og det er Main sit eget ansvar. Når alle forbindelser ligger ét sted, er det nemt at se, hvem der bruger hvad, og at ændre det senere.
Nye begreber
CanvasLayerer et lag, der tegnes oven på spillet og ikke flytter sig med kameraet. Det er det rigtige sted til UI.CenterContainerplacerer sit barn midt i sig selv.HBoxContainerplacerer sine børn ved siden af hinanden (vandret). Vi bruger den i trin 6 til at have to inventories side om side.- Access as Unique Name er en indstilling, der giver en node et navn, man kan finde via
%uanset placering i træet. Så slipper vi for lange stier somUI/CenterContainer/HBoxContainer/PlayerInventoryUI.
Opret Main-scenen
- Opret en ny scene med Node som rod. Omdøb den til
Main. Gem somScenes/Main.tscn. - Træk
Scenes/Player.tscnfra FileSystem ind påMain. Spilleren bliver nu et barn afMainmed navnetPlayer. - Højreklik på
Main, vælg Add Child Node, og tilføj en CanvasLayer. Omdøb den tilUI. - Tilføj en CenterContainer som barn af
UI. Vælg den, og klik på Layout i værktøjslinjen over 2D-vinduet (eller find Layout → Anchors Preset i Inspector). Vælg Full Rect, så den fylder hele skærmen. - Tilføj en HBoxContainer som barn af
CenterContainer. Sæt Theme Overrides → Constants → Separation til 40. - Træk
Scenes/InventoryUI.tscnind påHBoxContainer. Omdøb den tilPlayerInventoryUI. - Højreklik på
PlayerInventoryUI, og vælg Access as Unique Name. Der kommer et%ved siden af navnet.
Træet skal se sådan ud:
Main (Node)
├── Player (Player.tscn)
└── UI (CanvasLayer)
└── CenterContainer
└── HBoxContainer
└── %PlayerInventoryUI (InventoryUI.tscn)
Scriptet til Main
Højreklik på Main, vælg Attach Script, vælg C#, og sæt stien til Scripts/Game/Main.cs. Erstat indholdet med:
- Main.cs
using Godot; // Main samler det hele: den fortæller UI'et, hvilket inventory det skal vise. public partial class Main : Node { public override void _Ready() { Player player = GetNode<Player>("Player"); // "%" finder en node med "Access as Unique Name", uanset hvor den ligger i scenen. InventoryUI playerUi = GetNode<InventoryUI>("%PlayerInventoryUI"); // Fortæl UI'et, hvilket inventory det skal vise. playerUi.SetInventory(player.Inventory); } }
Fjern også test-linjen fra Player.cs. Den skal nu se sådan ud:
- Player.cs
using Godot; // Spilleren er en "ejer" af et inventory. // Inventory-komponenten ligger som barn i Player-scenen. public partial class Player : Node { public Inventory Inventory { get; private set; } public override void _Ready() { Inventory = GetNode<Inventory>("Inventory"); } }
Forklaring:
player.Inventoryer den property, du lavede i trin 2.Mainkan få fat i spillerens inventory uden at kende scenens indre opbygning.playerUi.SetInventory(player.Inventory)er hele forbindelsen mellem data og visning. UI'et opretter slots og viser items.- Rækkefølgen i
_Readyer vigtig. Børn bliver klar før deres forældre, så nårMain._Ready()kører, erPlayerogPlayerInventoryUIbegge klar.Player.Inventoryer sat, og UI'et har fundet sitGrid.
Kør spillet
- Tryk på Build.
- Tryk på Run Project (
F5). Godot spørger, hvilken scene der er hovedscene. VælgScenes/Main.tscn. (Du kan også ændre den under Project → Project Settings → Application → Run → Main Scene.) - Du skal se et 3×3 inventory midt på skærmen. De første slots viser dine start-items.
- Hold musen over et item. Efter et øjeblik kommer en tooltip med itemets navn.
Eksperimenter
- Åbn
Player.tscn, markérInventory, og sæt Slot Count til 12. Kør igen. Gridet får fire rækker, og baggrunden vokser med. Du har ikke ændret en linje kode. Sæt tallet tilbage til 9. - Tilføj flere start-items til spillerens inventory, og se, at de lægger sig i de næste slots.
Tjekliste
- Hovedscenen er
Main.tscn, og spillet viser et 3×3 inventory. - Items har ikoner og tooltips.
- Der er ingen røde fejl i Output.
