Browse Source

Add page about using global classes in C# (#6740)

Co-authored-by: Max Hilbrunner <[email protected]>
Raul Santos 2 years ago
parent
commit
27e7f8433c

+ 4 - 1
tutorials/scripting/c_sharp/c_sharp_exports.rst

@@ -263,6 +263,8 @@ Since Godot 4.0, nodes can be directly exported without having to use NodePaths.
     [Export]
     [Export]
     public Node Node { get; set; }
     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:
 Exporting NodePaths like in Godot 3.x is still possible, in case you need it:
 
 
 .. code-block:: csharp
 .. code-block:: csharp
@@ -296,7 +298,8 @@ Therefore, if you specify a type derived from Resource such as:
     private AnimationNode Resource;
     private AnimationNode Resource;
 
 
 The drop-down menu will be limited to AnimationNode and all
 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
 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
 editor, the exported properties are still editable. This can be used

+ 52 - 0
tutorials/scripting/c_sharp/c_sharp_global_classes.rst

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

BIN
tutorials/scripting/c_sharp/img/globalclasses_addnode.webp


BIN
tutorials/scripting/c_sharp/img/globalclasses_createresource.webp


BIN
tutorials/scripting/c_sharp/img/globalclasses_exportedproperty1.webp


BIN
tutorials/scripting/c_sharp/img/globalclasses_exportedproperty2.webp


+ 1 - 0
tutorials/scripting/c_sharp/index.rst

@@ -12,4 +12,5 @@ C#
    c_sharp_variant
    c_sharp_variant
    c_sharp_signals
    c_sharp_signals
    c_sharp_exports
    c_sharp_exports
+   c_sharp_global_classes
    c_sharp_style_guide
    c_sharp_style_guide