unity 单例模式(实例详解)

这篇具有很好参考价值的文章主要介绍了unity 单例模式(实例详解)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

以下是一个简单的C#实现Unity中单例模式的例子:

public class SingletonClass : MonoBehaviour
{
    private static SingletonClass _instance;

    public static SingletonClass Instance
    {
        get
        {
            if (_instance == null)
            {
                // 如果实例不存在,则查找场景中已有的SingletonClass组件并将其设置为_instance
                _instance = FindObjectOfType<SingletonClass>();

                // 如果没有找到实例,创建一个新的GameObject挂载SingletonClass脚本并设置为_instance
                if (_instance == null)
                {
                    var singletonObject = new GameObject();
                    _instance = singletonObject.AddComponent<SingletonClass>();
                    singletonObject.name = nameof(SingletonClass);
                    DontDestroyOnLoad(singletonObject); // 保持单例在整个应用生命周期内不被销毁
                }
            }

            return _instance;
        }
    }

    protected SingletonClass() {}

    private void Awake()
    {
        // 如果_instance尚未初始化,并且当前对象不是_instance(即第一次Awake调用)
        if (_instance == null && this != _instance)
        {
            // 设置当前对象为_instance
            _instance = this;
            
            // 防止切换场景时该单例对象被销毁
            DontDestroyOnLoad(gameObject);
        }
        else if (this != _instance) // 若_instance已存在但不是当前对象,则销毁多余的实例
        {
            Destroy(gameObject);
        }
    }
}

在C#中,protected SingletonClass() {} 这个构造函数的作用是限制类的实例化方式。在这个单例模式实现中,将构造函数设为 protected 有以下几点意义:

  1. 防止外部直接创建实例:由于构造函数是受保护的(protected),所以其他类无法通过 new SingletonClass() 的方式直接实例化该类。这样确保了只有单例类自己内部才能创建实例。

  2. 允许子类继承:尽管外部不能直接实例化,但这个构造函数对子类仍然是可见的。这意味着如果将来需要基于 SingletonClass 创建派生类,子类可以通过 base() 调用基类的构造函数进行初始化。

  3. 符合单例设计原则:在单例模式中,我们希望控制类的实例化过程,以确保在整个应用程序中只有一个实例存在。通过将构造函数设为 protected,并提供一个公共静态属性或方法来获取单例实例,可以确保这一目标得以实现。

因此,在上面的Unity单例模式实现中,protected SingletonClass() {} 构造函数是为了配合单例模式的实现策略,限制实例化权限,保证全局唯一性。

在上述代码中,SingletonClass 类遵循单例模式原则,确保无论何时何地访问 SingletonClass.Instance,返回的都是同一个实例。同时,为了防止场景切换时该单例对象被销毁,我们使用了 DontDestroyOnLoad 方法。

python推荐学习汇总连接:
50个开发必备的Python经典脚本(1-10)

50个开发必备的Python经典脚本(11-20)

50个开发必备的Python经典脚本(21-30)

50个开发必备的Python经典脚本(31-40)

50个开发必备的Python经典脚本(41-50)
————————————————

​最后我们放松一下眼睛
unity 单例模式(实例详解),unity C#设计模式详解,unity,单例模式,c#文章来源地址https://www.toymoban.com/news/detail-818433.html

到了这里,关于unity 单例模式(实例详解)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Unity设计模式之单例模式

    单例模式(Singleton)是设计模式中很常见的一种设计模式,目的是为了让一个类在程序运行期间有且仅有一个实例,且方便全局访问。 1、私有的构造函数。 2、含有一个该类的静态私有对象。 3、静态的公有函数或属性,方便用户创建或者获取它本身的静态私有对象。 当项目

    2023年04月09日
    浏览(57)
  • Singleton 单例模式简介与 C# 示例【创建型】【设计模式来了】

    一句话解释:   单一的类,只能自己来创建唯一的一个对象。 单例模式(Singleton Pattern)是日常开发中最简单的设计模式之一。这种类型的设计模式属于 创建型模式 ,它提供了一种创建对象的最佳方式。 这种模式涉及到一个 单一的类 ,该类负责 创建自己的对象 ,同时

    2024年02月06日
    浏览(29)
  • DCL 单例模式设计为什么需要 volatile 修饰实例对象

     DCL 问题,是在基于双重检查锁设计下的单例模式中,存在不 完整对象的问题。而这个不完整对象的本质,是因为指令重排序导致的。 当我们使用 instance=new DCLExample()构建一个实例对象的时候,因为 new 这个操作并不是原子的。所以这段代码最终会被编译成 3 条指令: 为对象

    2024年02月08日
    浏览(38)
  • 设计模式——单例模式详解

    设计模式分为三种类型,共23种 创建型模式: 单例模式,抽象工厂模式,原型模式,建造者模式,工厂模式 结构性模式: 适配器模式,桥接模式,装饰模式,组合模式,外观模式,享元模式,代理模式 行为型模式: 模板方法模式,命令模式,访问者模式,迭代器模式,观

    2024年02月08日
    浏览(30)
  • unity 单例模式(实例详解)

    以下是一个简单的C#实现Unity中单例模式的例子: 在C#中, protected SingletonClass() {} 这个构造函数的作用是限制类的实例化方式。在这个单例模式实现中,将构造函数设为 protected 有以下几点意义: 防止外部直接创建实例 :由于构造函数是受保护的(protected),所以其他类无法

    2024年01月23日
    浏览(23)
  • 【设计模式】C++单例模式详解

    ⼀个类仅有⼀个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享。 那么,我们必须保证: 该类不能被复制;也不能被公开的创造。 对于 C++ 来说,它的构造函数,拷贝构造函数和赋值函数都不能被公开调用。 单例模式又分为 懒汉模式 和 饿汉模式 ,它们

    2024年02月05日
    浏览(36)
  • 03-JAVA设计模式-单例模式详解

    单例模式(Singleton Pattern)是设计模式中的一种,它确保一个类仅有一个实例,并提供一个全局访问点来访问该实例。这种设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 单例模式的应用场景十分广泛,主要涉及需要频繁使用某个对象而又不想重复创建的情况

    2024年04月13日
    浏览(45)
  • 【设计模式】详解单例设计模式(包含并发、JVM)

    在软件开发中,经常需要某些类 只能有唯一的实例 ,比如数据库连接。如何才能保证整个应用中只有一个唯一实例?如果靠人为制定的协定来约束,显然不能很好的保证这一点。如果要从 语法上约束 ,在面向对象里面,什么地方能够约束实例的创建? 显然,只有 构造函数

    2024年02月15日
    浏览(25)
  • [Unity] 单例设计模式, 可供继承的单例组件模板类

    一个可供继承的单例组件模板类: 因为 Unity 是单线程的, 所以在这里没有必要使用双检索 例如你要创建一个全局的单例管理类, 可以这样使用: 尽量避免让 SingletonComponent 帮你创建组件, 因为它只是单纯的将组件创建, 并挂载到空对象上, 而不会进行任何其他行为. 如果你的组件

    2024年02月08日
    浏览(32)
  • Java设计模式之单例模式详解--独一无二的事物

    本文主要讲述 单例模式 ,文中使用通俗易懂的案例,使你更好的学习本章知识点并理解原理,做到有道无术。 单例模式是23种设计模式中 创建型模式 的一种,通过单例模式的方法创建的类在当前进程或者线程中只有一个实例。单例模式有两种比较常见的实现方式: 饿汉式

    2024年02月07日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包