close

列舉其實不是必要的東西

但是他可以讓你比較好閱讀

在這我就用遊戲狀態來當作範例

enum

public class Test : MonoBehaviour {
    
    // 列舉遊戲狀態
    enum GameStatus
    {
        GAME_READY, // 遊戲準備
        GAME_START, // 遊戲開始
        GAME_OVER   // 遊戲結束
    }

    // 宣告你的列舉變數 遊戲狀態
    GameStatus gameStatus;

    // Use this for initialization
    void Start ()
    {
        // 用switch來判斷你的列舉狀態 
        // switch不懂可以查閱我的 (3)C# 的教學
        switch (gameStatus)
        {
            case GameStatus.GAME_READY:
                Debug.Log("GAME_READY");
                break;
            case GameStatus.GAME_START:
                Debug.Log("GAME_START");
                break;
            case GameStatus.GAME_OVER:
                Debug.Log("GAME_OVER");
                break;
        }
    }
}

 

哪這邊也補充一下一些重點

其實如果你看過我的switch的教學

你會發現  列舉跟他是一樣的

只是如果你都用int來表示  久了以後  

你回來看你的程式  你會被這數字搞瘋

1是代表什麼 ?? 2是什麼 

這就是列舉的好處  方便我們閱讀 一看就知道是什麼樣的狀態

那列舉其實也有int值表示 程式中都會從0開始 (像是索引值)

但是我們是可以修改他的

// 列舉遊戲狀態 (預設的int值)
 enum GameStatus
 {
     GAME_READY, // int值為0
     GAME_START, // int值為1
     GAME_OVER   // int值為2
 }
// 列舉遊戲狀態 (修改int值)
 enum GameStatus
 {
     GAME_READY = 0, // 遊戲準備
     GAME_START = 2, // 遊戲開始
     GAME_OVER = 1   // 遊戲結束
 }

你可以將你的列舉印出Log來看看 前面用(int)將他轉型

Debug.Log((int)GameStatus.GAME_START);

你會發現你的Start已經變為2了

那他的規則就是

如果你沒修改他  他就依照上一個的int值來+1

而如是以下的狀態

 // 列舉遊戲狀態
 enum GameStatus
 {
     GAME_READY = 0, // 遊戲準備
     GAME_START,     // 遊戲開始
     GAME_OVER = 1,  // 遊戲結束
     MAX
 }

 // GAME_READY = 0,  = 0 (固定值)
 // GAME_START,      = 1 (前一個+1)
 // GAME_OVER = 1,   = 1 (固定值)
 // MAX              = 2 (前一個+1)

 

不過基本上我們很少會對enum做很複雜的更改 頂多只有在第一個會做修改

 

那在這邊我會講int轉型是因為

同樣的我們也可以將int轉為列舉

Debug.Log((GameStatus)2);

這時候的int數就會變成列舉索引2的MAX

在某些情況下  你會用數字來代表

你就可以將這數字轉成你的列舉狀態

 

 

這樣應該對enum的介紹有了解了吧

如果還是不懂可以留言哦!!!

 

arrow
arrow

    Weight 發表在 痞客邦 留言(2) 人氣()