这里是大千小熊,赶快关注我。
废话不多说,5分钟搞懂基础模式。
定义:
单例模式故名思义:就是全场景只存在一个这样的脚本(GameObject)比如GameManager您最好不要在一个场景放的太多,要不然可能会产生歧义。(我们使用GameManger存放一些Score等数据)
功能:
(1)全场景就Ta一个。 (2)切换场景的时候,不会被Destory掉。
对于(2)的解说:比如我们有两个Scene,分别为Scence1和Scence2,两个场景都有一个GameManger脚本,那么当Scence1的脚本不被销毁进入Scence2的时候,Scence2的GameManager就应该“自杀”,为了保证整个场景只有一个GameManager。
原理:
全局性
public static GameManage Instance;
使用static 来使得Instance 为一个GameManage 类型的变量。 这样别的脚本就可以使用:GameManage.Instance 来访问。
唯一性
在Awake 里面进行判断,如果Instance 不为null 的话,那么就是说明已经存在了一个GameManager ,可能是上一个场景传入的脚本。所以当前的脚本就执行销毁。具体请参见代码。
全解代码:
using UnityEngine;
using UnityEngine.SceneManagement;
public class GameManage : MonoBehaviour {
public static GameManage Instance;
[Range(0, 100)]
public int Score;
private void Awake() {
if (Instance != null) {
Destroy(gameObject);
return;
}
Instance = this;
DontDestroyOnLoad(this);
if (SceneManager.GetActiveScene().name == "Scence1") {
Score = 1;
} else {
Score = 2;
}
}
private void Update() {
if (Input.GetKeyDown(KeyCode.A)) {
Application.LoadLevel("Scence2");
}
}
}
Destory是异步执行的,也就是说,Destory后面的代码也会继续进行,所以要么使用Return。要不然就DestroyImmediate
给我点赞👍,谢谢。 开学好忙啊,大专的生活也挺不错,就是没有姑娘愿意喜欢我。🥺 我要谈恋爱!!! 我要谈恋爱!!! 我要谈恋爱!!! (土拔鼠尖叫!!!) 所以博客写得简陋点🤡
|