91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

[unity]單例模式

發布時間:2020-08-29 20:17:46 來源:網絡 閱讀:742 作者:蓬萊仙羽 欄目:開發技術

關于Unity的腳本,用過的人應該都會覺得使用之方便了,又加上Unity把腳本與界面集成,使他更為人性化。已經這么方便了,為什么還要講一些編程思維呢?
其實做一些小應用是沒有關系的,不過當工程越來越大時,你會發現其維護難度會越來越大,Unity其他我講不了,腳本上我做一些個人學習總結,以作各位參考,疏漏出錯之處,還請補充,一起進步。
廢話不多說,讓我們開始。
我也不講單例模式的概念了,英文叫singleton,大家可以Google一下概念。
切入正文。單例模式可以用來做什么呢?他可以很方便地提供數據、對象的訪問方式,單例僅允許被實例一次,這就保證了他在各個程序模塊間的唯一性。大家可能會想到全局變量,是的,確實可以用全局變量來做。不過為了提供代碼的可維護性,全局是有很大局限的。你又想在Unity里經常還可Static 變量會共享信息,不過你還發現他被聲明在各處。對的,不好找,不好維護。
下面我做個數據共享的單例模式的例子:
創建一個名為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 {

    // Use this for initialization
    void Start () {
          
    }
    
    // Update is called once per frame
    void Update () {
        if(ModelLocator.getInstance.myString!=null && ModelLocator.getInstance.myString!=""){
            //do somethings;
        }
    }
}

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

public class Action2 : MonoBehaviour {
    
    public bool state=true;
    // Use this for initialization
    void Start () {
        
    }
    
    // Update is called once per frame
    void Update () {
        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 {

    private string _myString;
    private static ModelLocator instance;
    public static ModelLocator getInstance{
        get{
            if(instance==null){
                instance=new ModelLocator();
            }
            return instance;
        }
    }
    public string myString{
        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 ,是添加不了的。如此更明確了他的功能,以上代碼已經經過測試,沒有問題。
向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

平顶山市| 苗栗市| 桂阳县| 自贡市| 青海省| 同江市| 三门峡市| 当雄县| 拉萨市| 习水县| 梁山县| 郎溪县| 丹阳市| 通辽市| 津南区| 万荣县| 若羌县| 隆安县| 文水县| 高唐县| 阿勒泰市| 上蔡县| 景谷| 收藏| 万安县| 唐海县| 高邮市| 富源县| 成安县| 镇赉县| 盐源县| 赫章县| 濮阳县| 通辽市| 定州市| 绥江县| 安仁县| 沛县| 阳曲县| 龙江县| 邢台市|