关于Unity的脚本,用过的人应该都会觉得使用之方便了,又加上Unity把脚本与界面集成,使他更为人性化。已经这么方便了,为什么还要讲一些编程思维呢?
其实做一些小应用是没有关系的,不过当工程越来越大时,你会发现其维护难度会越来越大,Unity其他我讲不了,脚本上我做一些个人学习总结,以作各位参考,疏漏出错之处,还请补充,一起进步。
废话不多说,让我们开始。
我也不讲单例模式的概念了,英文叫singleton,大家可以Google一下概念。
切入正文。单例模式可以用来做什么呢?他可以很方便地提供数据、对象的访问方式,单例仅允许被实例一次,这就保证了他在各个程序模块间的唯一性。大家可能会想到全局变量,是的,确实可以用全局变量来做。不过为了提供代码的可维护性,全局是有很大局限的。你又想在Unity里经常还可Static 变量会共享信息,不过你还发现他被声明在各处。对的,不好找,不好维护。
下面我做个数据共享的单例模式的例子:
创建一个名为ModelLocator的C#脚本,

using UnityEngine;
using System.Collections;

public class ModelLocator {

  
  
  
       get{
           if(instance==null){
              
           }
           return instance;
       }
  
}

怎么使用呢?如下面一个MonoBehaviour 成为场景中对象的行为后,他就会一直访问这个myString的变量了。
using UnityEngine;
using System.Collections;

public class Action1 : MonoBehaviour {

  
  
         
  
   
  
  
       if(ModelLocator.getInstance.myString!=null && ModelLocator.getInstance.myString!=""){
           //do somethings;
       }
  
}

下面是另一个MonoBehaviour 做的事:
using UnityEngine;
using System.Collections;

public class Action2 : MonoBehaviour {
   
  
  
  
       
  
   
  
  
       if(state){
           ModelLocator.getInstance.myString="I'm a Unityer!";
       }else{
           ModelLocator.getInstance.myString="";
       }
  
}



这个部分只是演示了如何对数据的一种管理思想。单例模式在Unity里的应用其实是很广泛的,如观察者模式中就用到了这个模式,本人将在有时间单独写个报道。

补充C#属性(get/set)的一些使用技巧:
2,添加逻辑,如
ModelLocator 可以这样写:

using UnityEngine;
using System.Collections;

public class ModelLocator {

  
  
  
       get{
           if(instance==null){
              
           }
           return instance;
       }
  
  
       get{
           return "CG says:"+_myString;
       }
       set{
           _myString=value;
       }
  
}


1,访问控制:
public string myString{
       get{
           return "CG says:"+_myString;
       }

那么myString是只读属性

public string myString{       
       set{
           _myString=value;
       }


  
那么myString不可读,但可写,


注:ModelLocator 不需附加到场景中的物体,实际上他不是个MonoBehaviour ,是添加不了的。如此更明确了他的功能,以上代码已经经过测试,没有问题。