Menu
How to program in Godot - GDScript Tutorial

How to program in Godot - GDScript Tutorial

Brackeys

2,405,966 views • 2 years ago Save 53 min 5 min read

Video Summary

This video offers a comprehensive overview of GDScript, a high-level, object-oriented, and gradually typed programming language designed for the Godot game engine. It covers fundamental concepts such as variables, conditional statements, and functions, progressing to more advanced topics like arrays, dictionaries, enums, signals, and classes. The tutorial emphasizes practical application by demonstrating how to modify nodes, handle user input, and structure code for reusability and readability.

Key features explored include dynamic vs. static typing, the use of export for inspector integration, and the distinction between inheritance and composition. The video also highlights best practices like the "call down, signal up" communication pattern between nodes and the importance of code style. By the end, viewers gain a solid understanding of GDScript's capabilities for game development.

Short Highlights

  • Core Concepts: Variables, conditionals (if/else/elif), and functions are fundamental building blocks.
  • Data Structures: Arrays store ordered lists, while dictionaries use key-value pairs for flexible data organization.
  • Control Flow: Loops (for/while) repeat code, and match statements provide powerful conditional execution.
  • Object-Oriented Programming: Classes, inheritance, and inner classes enable structured, reusable code.
  • Node Interaction: Signals, getters/setters, and export variables facilitate communication and customization between nodes.
  • Randomization: Functions like randf and randirange generate random numbers for dynamic gameplay.
  • Best Practices: Adhering to style guides and the "call down, signal up" communication pattern ensures clean, maintainable code.

Key Details

Hello World [00:26]

  • A basic GDScript program starts with a ready function, which executes when a node enters the scene tree.
  • The print() function outputs messages to the console.
  • GDScript uses newlines to terminate statements and indentation to define code blocks.

Syntax [04:02]

  • Statements end with a newline; semicolons are not required.
  • Indentation (tabs) is crucial for defining code structure.
  • GDScript is case-sensitive.

Modifying Nodes 1.0 [04:59]

  • Nodes can be modified via script by referencing them and changing their properties.
  • Dragging a node into the script creates a reference.
  • The modulate property can change the color of UI elements and sprites.

Input [06:31]

  • Input actions are defined in Project Settings > Input Map.
  • The _input(event) function detects user input.
  • event.is_action_pressed() and event.is_action_released() check specific input actions.

Variables 1.0 [08:41]

  • Variables store data and are declared using var.
  • They can be assigned values and modified using arithmetic operators (+=, -=, etc.).
  • Variables have scope, meaning they are accessible only within certain parts of the code.

If Statements [10:28]

  • if statements execute code based on conditions.
  • Comparisons include ==, !=, <, >, <=, >=.
  • else and elif (else if) provide alternative execution paths.

Comments [13:01]

  • Comments explain code and are ignored by the interpreter.
  • Single-line comments start with #.
  • Multiple lines can be commented out by selecting them and using Ctrl+Shift+A (or right-click > Toggle Comment).

Variables 2.0 [13:49]

  • Variables can be dynamically typed (type inferred) or statically typed (type explicitly declared).
  • export variables appear in the Inspector panel.
  • const declares constants, which cannot be changed after initialization.

Functions [18:30]

  • Functions group reusable code blocks.
  • They are defined using func and can accept parameters and return values.
  • Built-in functions like ready and input are prefixed with an underscore (_).

Random Numbers [22:33]

  • randf() returns a random float between 0 and 1.
  • randirange(min, max) returns a random integer within a specified range.

Documentation [24:11]

  • GDScript documentation is integrated into the editor.
  • Ctrl + Click on a function or class opens its documentation.

Arrays [24:34]

  • Arrays store ordered lists of elements.
  • Elements are accessed using zero-based indices.
  • Arrays can be statically typed to enforce element types.

Loops [26:33]

  • for loops iterate over sequences (like arrays) or ranges.
  • while loops repeat as long as a condition is true.
  • break exits a loop, and continue skips to the next iteration.

Dictionaries [30:25]

  • Dictionaries store key-value pairs.
  • Keys are unique identifiers used to access values.
  • They can contain mixed data types and even nested dictionaries or arrays.

Enums [33:54]

  • Enums define a set of named constants, useful for states or tags.
  • They improve code readability and safety compared to using raw strings or integers.
  • Enums can be used with export to create dropdowns in the Inspector.

Match Statements [36:52]

  • match statements are similar to switch statements, executing code based on variable values.
  • They are particularly useful with enums for handling different states.

Modifying Nodes 2.0 [37:58]

  • onready variables ensure nodes are fully initialized before being accessed.
  • export variables of type Node or specific node types allow referencing nodes from the Inspector.
  • is keyword checks if a node is of a certain type.

Signals [40:38]

  • Signals are messages emitted by nodes when events occur.
  • Other nodes can connect to these signals to react to events.
  • Signals decouple nodes, promoting modular design.

Getters and Setters [44:30]

  • Getters and setters allow custom code to run when a variable is accessed or modified.
  • They can be used for validation, emitting signals, or transforming data.

Classes [47:20]

  • Classes are blueprints for creating objects (instances).
  • They encapsulate data (variables) and behavior (functions).
  • class_name declares a script as a class, making it accessible globally.

Inheritance [53:19]

  • Inheritance allows a class to inherit properties and methods from a parent class (e.g., extends Node).
  • This forms the basis of Godot's node system.

Call Down, Signal Up [55:31]

  • A best practice for node communication: children call functions on parents, while parents use signals to notify children.
  • Sibling communication is typically managed by their common parent.

Style [57:08]

  • Adhering to the official GDScript style guide promotes code readability and maintainability.

Other People Also See