Unity之C#学习笔记(16):单例模式及单例模板类 Singleton and MonoSingleton

本文介绍了Unity游戏开发中单例模式的应用,详细讲解了如何实现单例类,并提供了具体的代码示例。此外还讨论了如何解决延迟初始化带来的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前篇链接:Unity之C#学习笔记(15):特化委托Action, Func和Lambda表达式

从这节开始,我们来讲几个在游戏设计中非常实用的设计模式,先看单例模式。还是从一个实例入手。

在游戏设计中,通常会采用模块化的设计思想,将游戏功能分解成多个具体的功能模块,并用一个Manager类脚本来管理实现该模块下的功能,比如总管全局的GameManager,管理UI的UIManager,管理声音的AudioManager等等。通常,这些脚本会绑定到一个作为载体的空物体上。既然是管理者,这些类只需要也只应该有一个实例存在,而且互相应该能方便的交互。

以GameManager和UIManager为例。通常,想让二者进行交互,做法是先用Find方法找到对方挂载的物体,再用GetComponent获得对方实例。

public class UIManager : MonoBehaviour
{
   
   
    private GameManager _gm;

    private void Start()
    {
   
   
        _gm = GameObject.Find("Game Manager").GetComponent<GameManager>();
        // do something with _gm...
    }
}

然而,对于Manager类,我们应该实现其只能有一个实例的特性,并利用该特性实现更简单的访问方式GameManager.Instance.CallSomeFunc(),类似于static(但我们不希望让GameManager成为static类,static会带来很多限制和问题)。单例模式就是针对这个问题的一种创建型设计模式。

为了保证GameManager类只有一个实例,先写private构造函数,覆盖掉默认的public构造函数,防止外部创建实例。然后用一个private static变量_instance承载该类唯一实例,对外暴露public static Instance属性,只提供get访问器:

using System;
using System
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值