Kaynağa Gözat

Merge pull request #8923 from 31/dev/31/cs-global

Clarify C# GlobalClass exported node behavior
Matthew 1 yıl önce
ebeveyn
işleme
ec3e094bf9

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

@@ -293,7 +293,18 @@ 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`.
+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:
 Exporting NodePaths like in Godot 3.x is still possible, in case you need it:
 
 

+ 34 - 4
tutorials/scripting/c_sharp/c_sharp_global_classes.rst

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

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


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


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