Static
public class RoleManager
{
public static List<GameObject> list;
}
单例模式
public class RoleManager
{
private ()
{
}
private static RoleManager _instance;
public static RoleManager Instance
{
get
{
if(_instance == null)
{
_instance =new RoleManager();
}
return _instance;
}
}
public List<GameObject> list;
}
生命周期
- static【从程序运行到结束】:使用static修饰的成员变量,不管你调用它,还是不调用,它都会在最开始时加载在内存中,可以认为它是一种独立于类的存在。
- 单例【从产生类的实体到消亡】:单例模式的成员变量,和普通的类一样,都是从类实体的创建开始才具有了生命,不同的是,单例模式它保证了对外调用时始终作用于一个对象。
在Unity中显示的特性 - 场景转换、物体删除、脚本删除不会影响静态成员变量,其始终存在。今天在开发一个小功能时,在一个脚本中的Awake阶段中获得的GameObject添加到另一个脚本的静态变量List中,这使我再次加载该场景中,再次添加了重复的GameObject。刚开始想到的是在Awake阶段将GameObject添加到一个单例模式下的成员变量List中,这样毫无疑问会出错,因为在这个时候该类的List还没有被加载,所以选择了静态List,因为它始终在普通的类之前被加载到,无需考虑到它的存在性。