You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
NoahLan 3ebed1c113 first commit 11 months ago
..
LanLib.Singleton.asmdef first commit 11 months ago
LanLib.Singleton.asmdef.meta first commit 11 months ago
README.md first commit 11 months ago
README.md.meta first commit 11 months ago
Singleton.cs first commit 11 months ago
Singleton.cs.meta first commit 11 months ago
SingletonAutoLoadAttribute.cs first commit 11 months ago
SingletonAutoLoadAttribute.cs.meta first commit 11 months ago
SingletonModes.cs first commit 11 months ago
SingletonModes.cs.meta first commit 11 months ago

README.md

UnitySingleton

可以在Editor和Runtime混用的Unity单例模块。稳定可靠懒加载无额外开销任何情况都不会出现多实例化。

GitHub last commit GitHub package.json version openupm

Features

  • 兼容所有场景,稳定可靠的提供一个单例:
    • Editor和Runtime混合使用
    • 中途重新编译脚本
    • 不同的Reload Domain选项
    • 场景切换
    • etc
  • 可以包含子物体基于MonoBehaviour可添加子GameObject
  • 独立于场景单例默认使用HideFlags隐藏不属于任何场景不需要考虑入口场景
  • 可检索可视化窗口检索单例列表Window/bbbirder/Singletons

Basic Usage

只需要继承Singleton<T>

using UnityEngine;
using com.bbbirder.unity;
public class YourComponent:Singleton<YourComponent>{
    protected override void Awake(){
        SayHello();
    }
    public void SayHello(){
        print("hello,world");
    }
}

需要调用的地方

    YourComponent.Instance.SayHello();

通过Window/bbbirder/Singletons窗口查看当前的单例

窗口截图

More Controls

指定实例化时机

[assembly: SingletonAutoLoad(typeof(Manager))]
public class Manager:Singleton<Manager>{ //Manager 将会自动实例化

}

SingletonAutoLoadAttribute接收2个参数

  • 目标单例类型
  • 实例化时机 enum SingletonCreateCondition
    • LazyLoad 懒加载通过Instance获取时才实例化。无SingletonAutoLoad属性时默认模式
    • DomainReload 即时加载,在脚本开始运行前实例化。SingletonAutoLoad缺省选项
    • EnterPlay 进入播放模式加载

使用形如[assembly:]的特性使得SingletonAutoLoadAttribute在内部检索所有单例类型时消耗小且非常迅速。可以放心的在Runtime环境下使用此模块。

指定销毁时机

public class Manager:Singleton<Manager>{
    public override SingletonDestroyCondition DestroyCondition => SingletonDestroyCondition.ExitEdit;
}

SingletonDestroyCondition 具有以下选项:

  • Never 不自动销毁
  • SceneUnload 场景卸载时
  • ReloadDomain 脚本重加载时 (默认)
  • ExitPlay 切出播放模式时
  • ExitEdit 切出编辑模式时

自定义实例化方法


public class TestSingleton : Singleton<TestSingleton>
{
    protected new static TestSingleton CreateInstance(){
        var go = Singleton<TestSingleton>.CreateInstance();
        go.name += " (Singleton)";
        return go;
    }
}