环境

godot 4.1.2+
.net8

通过 GetMainLoop + sceneTree 获取

一般来说需要使用 单例模式 获取的通常都是 autoloads 的代码,由于 MainLoop 实质上也是单例的,所以可以通过 mainLoop 来获得 sceneTree 通过 root GetNode 来获取

public partial class Test : Node  
{
	public static Test Instance  
	{  
	    get  
	    {  
	        var mainLoop = Engine.GetMainLoop();  
	        if (mainLoop is SceneTree sceneTree) return sceneTree.Root.GetNode<Test>("/root/<name>");  
	        return null;  
	    }
    }
}

这样我们就能比较简单的获取这个实例了 Test.Instance.xxxx 不过这种代码在 autoloads 中使用并不如直接 __Ready 来的方便,所以这里并不推荐,这一方法比较适合的是在 Node 外部调用时,通过全局 API 访问才需要。

通过 static 注册的方式

还有一种比较常见的方式是通过 public static 在 ready 的时候去注册:

public partial class Test : Node  
{  
    public static Test Instance { get; private set; }  
    public override void _Ready()  
    {        
	    Instance = this;  
    }
}

本文标题:godot4 C# 单例获取节点

永久链接:https://iceprosurface.com/2024/godot4-singleton/

作者授权:本文由 icepro 原创编译并授权刊载发布。

版权声明:本文使用「署名-非商业性使用-相同方式共享 4.0 国际」创作共享协议,转载或使用请遵守署名协议。

查看源码: