Unity 單例模式範例
分類
建立時間: 2023年5月14日 10:51
更新時間: 2023年5月14日 18:07
說明
單例模式 (Singleton) 是一種軟體設計模式,旨在確保在整個應用程式中只有一個實例(instance)存在並且可以全局訪問。
因為單例模式是一種概念,所以它會衍生出很多種實作,本篇將分享在 Unity 使用單例模式的範例,讀者可以參考範例,進而實作自己的單例模式腳本。
依賴空遊戲物件
這個範例需要建立一個空的遊戲物件,並把單例腳本添加上去。
以下是一個音樂播放器的腳本
MusicPlayer.cs
using UnityEngine;
using UnityEngine.SceneManagement;
/// <summary>
/// 音樂播放器
/// </summary>
public class MusicPlayer : MonoBehaviour
{
private AudioSource audioSource;
private static MusicPlayer instance;
/// <summary>
/// 自身音源
/// </summary>
public AudioSource AudioSource
{
get => audioSource;
}
/// <summary>
/// 單例實體
/// </summary>
public static MusicPlayer Instance
{
get => instance;
}
private void Awake()
{
if (instance != null)
{
Destroy(gameObject);
return;
}
instance = this;
DontDestroyOnLoad(gameObject);
audioSource = GetComponent<AudioSource>();
}
}
使用範例:
在場景建立一個空物件,並添加 AudioSource, MusicPlayer 組件,接著就可以在其他腳本呼叫。
// 靜音
MusicPlayer.Instance.AudioSource.volume = 0f;
純腳本單例模式
純腳本單例模式無需建立空遊戲物件,它會自動生成,只需呼叫腳本的 Instance 即可。
以下是音效播放器的範例,跟音樂播放器大同小異。
SoundPlayer.cs
using UnityEngine;
/// <summary>
/// 音效播放器,使用單例,無需建立遊戲物件
/// </summary>
public class SoundPlayer : MonoBehaviour
{
private AudioSource audioSource;
private static SoundPlayer instance;
public static SoundPlayer Instance
{
get
{
if (instance == null)
{
CreateInstance();
}
return instance;
}
}
/// <summary>
/// AudioSource 組件
/// </summary>
public AudioSource AudioSource
{
get => audioSource;
}
/// <summary>
/// 初始化實體
/// </summary>
private static void CreateInstance()
{
instance = new GameObject("SoundPlayer").AddComponent<SoundPlayer>();
instance.audioSource = instance.gameObject.AddComponent<AudioSource>();
DontDestroyOnLoad(instance.gameObject);
}
}
使用範例:
SoundPlayer.Instance.AudioSource.PlayOneShot(audioClip);
觀看次數: 1431
patternsingletonunity單例單例模式模式
一杯咖啡的力量,勝過千言萬語的感謝。
支持我一杯咖啡,讓我繼續創作優質內容,與您分享更多知識與樂趣!