本帖最後由 2266 於 2022-10-11 15:51 編輯
https://a032332852.pixnet.net/bl ... 8%E6%95%99%E5%AD%B8
列舉其實不是必要的東西
但是他可以讓你比較好閱讀
在這我就用遊戲狀態來當作範例
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)
複製代碼
那在這邊我會講int轉型是因為
同樣的我們也可以將int轉為列舉
- Debug.Log((GameStatus)2);
複製代碼
這時候的int數就會變成列舉索引2的MAX
在某些情況下 你會用數字來代表
你就可以將這數字轉成你的列舉狀態 |