Singleton在Unity中的最佳实践

序言

Singleton即单例,在C#中主要方便找一个脚本的实例。

在Unity中,一般给场景中的某个非常常用的脚本做成Singleton,这样其他脚本就方便找它,而不是每次用的时候FindObjectOfType或者在脚本里写个公共变量然后在编辑器中拖拽进去。

示例

废话不多说,上代码

private static NetworkRhythmDirector m_Instance = null;
    public static NetworkRhythmDirector Instance
    {
        get
        {
            if (m_Instance == null)
            {
                m_Instance = FindObjectOfType<NetworkRhythmDirector>();
                if (m_Instance == null)
                {
                    Debug.LogError("[NetworkRhythmDirector]No valid rhythm director in the scene!");
                }
                else
                {

                    return m_Instance;
                }
            }

            return m_Instance;
        }
    }

这是比较标准的应用。先声明一个私有变量和一个公共变量(都是静态),然后在Instance里写一个Get,里头判断一下m_Instance是否为空。

如果是,则找一下整个场景里这个脚本的实例。如果没有,则返回null。

错误示范

public static VideoChatHelper Instance;

    private void Awake()
    {
        Instance = this;
    }

别笑,这是我以前写的(在GitHub上非常光明正大的亮出这低级错误,多亏同好提醒),以前不太注意。

这个虽说也能达到效果,但是不稳定。

因为Unity里有一个东西叫做Script Execution Order,即脚本执行顺序。假设脚本A要在Awake中调脚本B的Instance做一些事情。如果脚本B按照上面的写法,那么脚本A可能会拿到一个null的Instance。

结语

学海无涯,不忘初心,牢记使命。多沉淀,多学习,实现从码农到艺术家的蜕变。

加油!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值