From a4e958c0e062c5d42388340baf92a037a3652639 Mon Sep 17 00:00:00 2001 From: 31 <31eee384@gmail.com> Date: Sat, 27 Jan 2024 15:18:30 -0800 Subject: [PATCH] singletons_autoload.rst: add C# example similar to "Global Variable" --- tutorials/scripting/singletons_autoload.rst | 27 +++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/tutorials/scripting/singletons_autoload.rst b/tutorials/scripting/singletons_autoload.rst index 1f483bd986a..3926ba0d855 100644 --- a/tutorials/scripting/singletons_autoload.rst +++ b/tutorials/scripting/singletons_autoload.rst @@ -94,6 +94,33 @@ be accessed directly in GDScript, without requiring ``get_node()``: PlayerVariables.health -= 10 +The **Enable** column has no effect in C# code. However, if the singleton is a +C# script, a similar effect can be achieved by including a static property +called ``Instance`` and assigning it in ``_Ready()``: + +.. tabs:: + .. code-tab:: csharp + + public partial class PlayerVariables : Node + { + public static PlayerVariables Instance { get; private set; } + + public int Health { get; set; } + + public override void _Ready() + { + Instance = this; + } + } + +This allows the singleton to be accessed from C# code without ``GetNode()`` and +without a typecast: + +.. tabs:: + .. code-tab:: csharp + + PlayerVariables.Instance.Health -= 10; + Note that autoload objects (scripts and/or scenes) are accessed just like any other node in the scene tree. In fact, if you look at the running scene tree, you'll see the autoloaded nodes appear: