1、单例模式:
单例仅允许被实例一次,这就保证了他在各个程序模块间的唯一性。
创建一个名为ModelLocator的C#脚本:
using UnityEngine;
using System.Collections;
public class ModelLocator {
public string myString;
private static ModelLocator instance;
public static ModelLocator getInstance{
get{
if(instance==null){
instance=new ModelLocator();
}
return instance;
}
}
}
怎么使用呢?如下面一个MonoBehaviour 成为场景中对象的行为后,他就会一直访问这个myString的变量了:
using UnityEngine;
using System.Collections;
public class Action1 : MonoBehaviour {
void Start () {
}
void Update () {
if(ModelLocator.getInstance.myString!=null && ModelLocator.getInstance.myString!=""){
//do somethings;
}
}
}
上面两个脚本是什么意思呢,第一个脚本即使用了单例模式的脚本,在第二个脚本中访问其变量的时候,首先就会判断其是否被初始化,初始化就直接返回其句柄,如果没有就new一次,这样就可以保证第一个脚本的实例化只有一次,这也就是单例模式的核心思想。
什么时候需要使用单例模式呢?正如它的名字一样,你认为一些东西在整个游戏中只有一个而你又想可以方便地随时访问它,这时你就可以考虑单例模式了。例如,你的游戏可能需要一个管理音乐播放的脚本,或者一个管理场景切换的脚本,或者一个管理玩家信息的通用脚本,又或者是管理游戏中各种常用UI的脚本。
2、单例模式在脚本中的应用:
全局脚本:所有场景都只能与这个唯一的全局脚本交互。
单例脚本:每一个场景里面有且只有一个,场景里面的脚本都只能和这个脚本交互,和别的脚本之间做间接交互。
3、MVC模式:
MVC框架模式,相信很多人都不会陌生,数据-控制-显示分离的工作方式或者叫做代码结构会使软件(游戏)的结构清晰化,逻辑更明了。
M(Model)数据层,两个用途:1保存数据;2发送数据更新信息;
V(View)视图层,两个用途:1接受用户从界面上的操作;2根据M层的数据显示相应的界面;
C(Controller)控制层,两个用途:1处理和界面无关的代码逻辑;2接受和处理网络数据;
我们来看以上模型:
a. 用户点击->UI响应控制->调用M更改数据->发送更新界面消息->V接收消息->更新界面
b. 用户点击->UI响应控制->发送界面跳转消息->V接收消息->更新界面
c. 用户点击->UI响应控制->UI自消化
其实,一般的界面模块,用以上的模型就足够了。但有些模块比较复杂,需要不断的与数据和界面交互,这时候C才有意义。