冒險日誌 - 生活隨筆

2018.09.02(日) – 用int抓取enum資訊

我蠻習慣用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

2 thoughts on “2018.09.02(日) – 用int抓取enum資訊

  1. 其實在Enum宣告內可以不用寫 = 1 , = 2之類的
    因為預設第一個會為0,然後累進1 排下去
    甚至可以將第一個指定為1,後面可以不用寫數字,這樣就會從1開始。

    Like

    1. 原來有預設!!!
      我之前找Enum轉int的方法找超久
      不然每次多一個Enum,Switch-Case裡面就要加一項
      如果可以直接用int去對應array的index就方便很多

      主要是我不知道Enum可以拿來強制轉型 哈哈哈
      (BossState)0會對應到第一個Enum 這樣

      Like

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s