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
5 changes: 4 additions & 1 deletion tutorials/scripting/c_sharp/c_sharp_exports.rst
Original file line number Diff line number Diff line change
Expand Up @@ -263,6 +263,8 @@ 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`.

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

.. code-block:: csharp
Expand Down Expand Up @@ -296,7 +298,8 @@ Therefore, if you specify a type derived from Resource such as:
private AnimationNode Resource;

The drop-down menu will be limited to AnimationNode and all
its inherited classes.
its inherited classes. Custom resource classes can also be used,
see :ref:`doc_c_sharp_global_classes`.

It must be noted that even if the script is not being run while in the
editor, the exported properties are still editable. This can be used
Expand Down
52 changes: 52 additions & 0 deletions tutorials/scripting/c_sharp/c_sharp_global_classes.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
.. _doc_c_sharp_global_classes:

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.
Global classes are registered with the ``[GlobalClass]`` attribute.

.. code-block:: csharp

using Godot;

[GlobalClass]
public partial class MyNode : Node
{
}

The ``MyNode`` type will be registered as a global class with the same name as the type's name.

.. 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.

.. code-block:: csharp

using Godot;

[GlobalClass, Icon("res://Stats/StatsIcon.svg")]
public partial class Stats : Resource
{
[Export]
public int Strength { get; set; }

[Export]
public int Defense { get; set; }

[Export]
public int Speed { get; set; }
}

.. image:: img/globalclasses_createresource.webp

The ``Stats`` class is a custom resource registered as a global class. :ref:`Exporting properties <doc_c_sharp_exports>` of the
type ``Stats`` will only allow instances of this resource type to be assigned, and the inspector
will let you create and load instances of this type easily.

.. image:: img/globalclasses_exportedproperty1.webp

.. image:: img/globalclasses_exportedproperty2.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.
1 change: 1 addition & 0 deletions tutorials/scripting/c_sharp/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -12,4 +12,5 @@ C#
c_sharp_variant
c_sharp_signals
c_sharp_exports
c_sharp_global_classes
c_sharp_style_guide