Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 12 additions & 1 deletion tutorials/scripting/c_sharp/c_sharp_exports.rst
Original file line number Diff line number Diff line change
Expand Up @@ -293,7 +293,18 @@ Since Godot 4.0, nodes can be directly exported without having to use NodePaths.
[Export]
public Node Node { get; set; }

Custom node classes can also be used, see :ref:`doc_c_sharp_global_classes`.
A specific type of node can also be directly exported. The list of nodes shown
after pressing "Assign" in the inspector is filtered to the specified type, and
only a correct node can be assigned.

.. code-block:: csharp

[Export]
public Sprite2D Sprite2D { get; set; }

Custom node classes can also be exported directly. The filtering behavior
depends on whether the custom class is a
:ref:`global class <doc_c_sharp_global_classes>`.

Exporting NodePaths like in Godot 3.x is still possible, in case you need it:

Expand Down
38 changes: 34 additions & 4 deletions tutorials/scripting/c_sharp/c_sharp_global_classes.rst
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,13 @@ C# global classes
=================

Global classes (also known as named scripts) are types registered in Godot's editor so they can be used
more conveniently. These classes show up in the *Add Node* and *Create Resource* dialogs,
and :ref:`exported properties <doc_c_sharp_exports>` are restricted to instances of the global class or derived classes.
more conveniently.

- Global classes show up in the *Add Node* and *Create Resource* dialogs.
- If an :ref:`exported property <doc_c_sharp_exports>` is a global class, the
inspector restricts assignment, allowing only instances of that global class
or any derived classes.

Global classes are registered with the ``[GlobalClass]`` attribute.

.. code-block:: csharp
Expand All @@ -21,8 +26,33 @@ The ``MyNode`` type will be registered as a global class with the same name as t

.. image:: img/globalclasses_addnode.webp

The ``[Icon]`` attribute also allows to provide the path to an icon so it can
be used as the class' icon in the editor.
The *Select a Node* window for the ``MyNode`` exported property filters the list
of nodes in the scene to match the assignment restriction.

.. code-block:: csharp

public partial class Main : Node
{
[Export]
public MyNode MyNode { get; set; }
}

.. image:: img/globalclasses_exportednode.webp

If a custom type isn't registered as a global class, the assignment is
restricted to the Godot type the custom type is based on. For example, inspector
assignments to an export of the type ``MySimpleSprite2D`` are restricted to
``Sprite2D`` and derived types.

.. code-block:: csharp

public partial class MySimpleSprite2D : Sprite2D
{
}

When combined with the ``[GlobalClass]`` attribute, the ``[Icon]`` attribute
allows providing a path to an icon to show when the class is displayed in the
editor.

.. code-block:: csharp

Expand Down
Binary file modified tutorials/scripting/c_sharp/img/globalclasses_addnode.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.