我蠻習慣用enum來處理需要分門別類時的狀況
例如: public enum Sound{開門聲, 受傷聲, 金幣聲}
然後再在SoundManager裡面使用function Play_Sound(Sound m_sound)來決定要播放哪個聲音
然而,我一直有個問題:要怎麼根據enum決定該執行什麼動作呢?
我以往都用最陽春的方式
void Play_Sound(Sound m_sound)
{
switch(m_sound)
{
case Sound.開門聲:
//播放開門聲
break;
case Sound.金幣聲:
//播放金幣聲
break;
}
}
這樣讓呼叫function時可以更明確指定要用哪一個聲音了
因為可以寫Play_Sound(Sound.金幣聲)
不然在code裡突然看到Play_Sound(1)真的會不知道在幹嘛XD
但是「從enum轉換回int型別的index」這一層關係我常常覺得處理得不是很好
每多增加一種音效,就要新開一個case,真的有點蠢
所以想知道有沒有什麼方法在宣告enum時就給他們各自一個代號…
於是就被我找到了!!!
https://answers.unity.com/questions/447240/get-enum-member-from-int.html
其實在Enum宣告內可以不用寫 = 1 , = 2之類的
因為預設第一個會為0,然後累進1 排下去
甚至可以將第一個指定為1,後面可以不用寫數字,這樣就會從1開始。
LikeLike
原來有預設!!!
我之前找Enum轉int的方法找超久
不然每次多一個Enum,Switch-Case裡面就要加一項
如果可以直接用int去對應array的index就方便很多
主要是我不知道Enum可以拿來強制轉型 哈哈哈
(BossState)0會對應到第一個Enum 這樣
LikeLike