Unity Update 優化系列基礎篇(一)

本文原創,轉載請註明出處:https://blog.csdn.net/qq_36503704/article/details/96491508


Unity Update 優化系列基礎篇(一)

Unity Update中處理功能邏輯一直是一件忌諱的做法,那麼怎麼避免在Undate中處理功能邏輯呢?


Unity 中Update有很多種,小編這裏主要講MonoBehaviour.Update,其他的Update 大家有興趣可以去了解一下,Unity 官方文檔搜索Update

要想優化,就先要了解Update,官方給出的描述:

Description

Update is called every frame, if the MonoBehaviour is enabled.

Update is the most commonly used function to implement any kind of game script. Not every MonoBehaviour script needs Update.

如果啓用了MonoBehaviour,則每幀調用更新。

Update是實現任何類型的遊戲腳本最常用的功能。不是每個MonoBehaviour腳本都需要Update

上邊的描述我們可以知道以下幾點:

1) 想要Update執行,則必須啓用該腳本,也就是掛在GameObject下,並啓用腳本。

2) Update執行間隔爲每幀執行一次。

3)   Update是很常用的一種方法。

4)如果腳本中並不需要Update,可以刪除。避免執行。


那麼通常會怎麼使用Update呢?

應用場景1:做bool值的判斷

通常我們會判斷某一個Bool值,來做出相應邏輯,比如判斷一個Object的顯隱,判斷自己定義的字段等等。如果這時需要我們時刻監聽該bool值並做出相應的邏輯處理。可以會寫成這樣。

    public GameObject obj;
	void Update () {
        if (obj.activeInHierarchy) {
            Debug.Log("顯示");
        } else{
            Debug.Log("隱藏");
        }
	}

這種寫法不建議使用,少的話還好,如果碰到類似情況都這麼寫就會出現性能問題,那怎麼解決呢?小編想到的方法就是封裝這一段邏輯處理,在Start方法裏執行第一次,後續如果有其它地方對Obj的activeInHierarchy進行修改,再次調用這個方法即可。

那如果是我們自己定義的bool怎麼處理呢?其實可以寫成這樣:

    private  bool testBool;
    public bool currentTestBool {
        set {
            if (testBool != value){
                testBool = value;
                if (testBool)
                {
                    Debug.Log("處理邏輯");
                }
                else{
                    Debug.Log("處理邏輯false");
                }
            }
        }
        get {
            return testBool;
        }
    }

這樣寫,相當變相監聽了testbool,修改currentTestBool 就相當於修改 testbool,然後再做相應邏輯處理,不過這個也需要初始化,因爲當testbool和currentTestBool在程序開始如果相等,第一遍就不會執行,所以算是一個坑。只能再寫一個初始化方法放在Start裏,如果初始時它們相等,做相應邏輯處理即可。

小編這些都是自己慢慢摸索出來的東西,大家可以借鑑,不一定是最好的哈,如果你發現更好的解決方法,在下方留言給我哦!!!今天就寫到這裏,後續慢慢更新。

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章