[C#][Unity]Static變數與一般變數有甚麼不同?
在教學中常會看到有參數被宣告為Static變數
如 : public static int score;
這類的靜態變數與一般的變數有何不同呢?
這跟程式語言的底層有關,一般的變數會隨實體產生時被New一個出來。
如 : 敵人的血量,每個敵人的實體都會有一個自己的變數血量。
而Static變數,在載入程式後會主動配給記憶體給程式(僅一次),後續無論實例化多少次,記憶體位置都一樣。亦即底層分配記憶體時,Static變數只屬於Class自身,不會隨我們New實體出來時,就重新被產生一次。
同時在寫Code的時候,呼叫Static變數不需要像呼叫一般的變數要先 GetComponent <>(),再由get到的Component讀取變數。
可以直接用Class.Static變數存取。
如
GetComponent ().isKinematic = true; //一般變數的情形
ScoreManager.score += scoreValue; //Static變數的情形
所以 Static 變數也通常被拿來用作總分數之類的公用變數使用。
有時也可以用來統一管理設定的變數,如難度係數、基礎統一的公用變數設定值等,藉此達到節約記憶體的目的。
如 : public static int score;
這類的靜態變數與一般的變數有何不同呢?
這跟程式語言的底層有關,一般的變數會隨實體產生時被New一個出來。
如 : 敵人的血量,每個敵人的實體都會有一個自己的變數血量。
而Static變數,在載入程式後會主動配給記憶體給程式(僅一次),後續無論實例化多少次,記憶體位置都一樣。亦即底層分配記憶體時,Static變數只屬於Class自身,不會隨我們New實體出來時,就重新被產生一次。
同時在寫Code的時候,呼叫Static變數不需要像呼叫一般的變數要先 GetComponent <>(),再由get到的Component讀取變數。
可以直接用Class.Static變數存取。
如
GetComponent
ScoreManager.score += scoreValue; //Static變數的情形
所以 Static 變數也通常被拿來用作總分數之類的公用變數使用。
有時也可以用來統一管理設定的變數,如難度係數、基礎統一的公用變數設定值等,藉此達到節約記憶體的目的。
留言
張貼留言