添加全局单例设置时,不要在脚本中设置类名
如果在脚本中定义了类名,类本身就是一个全局的类Godot中class_name与class 定义类的区别
两个都是定义类,但**注册范围、访问方式完全不一样:
class_name是全局注册指令,把这个类注册进项目全局命令空间,整个项目任意脚本,不需要preload,直接可以创建对象,使用Player:new()
class 只是定义一个文件内部定义类,不会注册全局,外部脚本不能直接创建对象,必须先preload脚本资源:
varscr=preload("res://models/player_data.gd")varitem=scr.ItemData.new()- 类的一些特性
- class_name定义的类是全局类,不需要prelaod,即可以直接使用,但是不能加入项目设置的全局单例中,但是要以定义静态方式直接引用,不过不能定义信号
- 定义的类如果没有显式继承任何的其它的类,默认是隐继承RefCounted,即类默认是使用计数器方式进行垃圾回收的。
- 如果显式继承Object类,那么这个类不会继承RefCounted,即不会被自动回收,需要手动调用.free(),否则会内存泄漏。
- 类的构造方法是_init()